반응형

우선 윤년의 조건이다.

1. 4로 나누었을 때 나머지가 0인 년도

2. 4로 나누어 떨어졌을때 나머지가 0이라도 100으로 나누었을 때도 나머지가 0이면 평년 

3. 4로 나누어 떨어졌을 때 나머지가 0이고 100으로 나누었을때도 나머지가 0이지만 , 400으로 나누어 떨어지면 윤년

package chap03;
import java.util.Scanner; // 입력 

public class plus {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int num;
		while(true) {
		System.out.printf("년도를 입력하세요 : ");
		num = s.nextInt();
		if(num%4==0) {
			System.out.println(num + "년은 윤년입니다.");
		}
		else if((num%4 == 0 & num%100 == 0) & num%400 == 0) {
			System.out.println(num + "년은 윤년입니다.");
		}
		else if(num%4==0 & num%100 == 0) {
			System.out.println(num + "년은 윤년이 아닙니다.");
		}
		else {
			System.out.println(num + "년은 윤년이 아닙니다.");
		}
	
		} 	 
	}
}

 위에는 if-else if문을 이용하여 짠 코드이다. 다소 복잡해보이고 조금 번거롭기 때문에

package chap03;
import java.util.Scanner; // 입력 

public class plus {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		System.out.print("년도를 입력하세요: ");
		int num = s.nextInt();
		boolean x = (num % 4) == 0;
		boolean y = (num % 100) != 0;
		boolean z = ((num %100 == 0) && (num % 400 == 0)); 
		if(x && (y||z)) {
			System.out.println(num + "년은 윤년 입니다.");
		}
		else {
			System.out.println(num + "년은 윤년이 아닙니다.");
		}
		s.close();
	}
}

 위에 코드 처럼 조건문을 부울변수에 넣고 다시 if-else문을 사용하여 더욱 간결하게 풀어내었다.

반응형

'JAVA > 2020 프로그램' 카테고리의 다른 글

[JAVA] 가위바위보 게임  (0) 2019.12.08
[JAVA] 별찍기  (0) 2019.12.08
[JAVA] 알파벳 프로그램  (0) 2019.12.07
[JAVA] 소수점 두자리까지 같은 지 확인  (0) 2019.12.07
양수 판단 코드  (0) 2019.12.07
반응형
package chap03;
import java.util.Scanner; // 입력 

public class plus {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int a, b;
		
		while(true) {
		System.out.printf("분자를 정수로 입력하세요 : ");
		a = s.nextInt();
		System.out.printf("분모를 정수로 입력하세요 : ");
		b = s.nextInt();
       		System.out.printf("결과는  %d 입니다.\n", a/b);
		if(b == 0) {
			System.out.printf("0으로 나눌 수는 없습니다.\n");
		} 	 
	}
}

자바로 프로그래밍 하던 중  Exception in thread "main" java.lang.ArithmeticException: 이라는 오류가 발생했다. 이유를 찾아보니 '특정식을 0으로 나누었을때 발생하는 예외' 라는 것을 알게 되었다. 그래서 여러 방법을 시도해보다가 

package chap03;
import java.util.Scanner; // 입력 

public class plus {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int a, b;
		
		while(true) {
		System.out.printf("분자를 정수로 입력하세요 : ");
		a = s.nextInt();
		System.out.printf("분모를 정수로 입력하세요 : ");
		b = s.nextInt();
		if(b == 0) {
			System.out.printf("0으로 나눌 수는 없습니다.\n");
		}
		else {
			System.out.printf("결과는  %d 입니다.\n", a/b);
            System.out.println("결과는 " + a/b + " 입니다. ");
			}
		} 	 
	}
}

 이렇게 if - case문을 사용하여 예외처리를 해주면 오류없이 코드가 진행되는 것을 알 수 있다. b가 0이 되어 a를 0으로 나누어 Exception in thread "main" java.lang.ArithmeticException: 오류가 발생하면 0으로 나눌수는 없습니다를 출력하고 이것이 아니라면 두 a와 b를 나눈 값을 출력하도록 코드를 짰다.

반응형

'JAVA > 문법' 카테고리의 다른 글

[JAVA] 클래스  (0) 2019.12.22
[JAVA] 배열 2  (0) 2019.12.15
[JAVA] 배열  (0) 2019.12.15
[JAVA] loop  (0) 2019.12.08
[JAVA] random(랜덤) 함수  (0) 2019.12.08
반응형
package chap03;
import java.util.Scanner; // 입력 

public class plus {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int a;
		
		while(true) {
		System.out.printf("정수를 입력하세요 : ");
		a = s.nextInt();
		if(a > 0) { // 0보다 크면 양수 
			System.out.printf("양수입니다.\n"); 
		}
		else {
			System.out.printf("양수가 아닙니다. \n");
			}
		} 	 
	}
}
반응형

'JAVA > 2020 프로그램' 카테고리의 다른 글

[JAVA] 가위바위보 게임  (0) 2019.12.08
[JAVA] 별찍기  (0) 2019.12.08
[JAVA] 알파벳 프로그램  (0) 2019.12.07
[JAVA] 소수점 두자리까지 같은 지 확인  (0) 2019.12.07
[JAVA] 윤년계산하기  (0) 2019.12.07
반응형

작년에 열린 넥슨 토크콘서트는 늦게 알게되어 참가하지 못해 이번년도는 꼭 참석하고 싶어서 1000자 꽉 채워서 

썼더니 통과시켜주었다. 장소는 동대문 디자인 플라자에서 진행되었는데 진짜 장소가 커서 놀랐다. 그래도 시작 시간보다 15분 정도 일찍 갔는데도 많은 사람들이 줄을 서고 있었다. (정말 컴퓨터에 흥미를 느끼고 관심을 가지고 있는 친구들이 이렇게나 많구나..하고 놀랐었다. )

들어갔더니 수많은 의자들과 와이드 스크린이 보였다.(조명이 너무너무 이상했다. 어떻게 찍어도 샘감이 넘 이상)

 

저 명찰과 함께 종이백을 하나씩 나눠주셨는데 안에는 이렇게 선풍기(여름이라서 그런가? 완전 센스) 그리고 강의하시는 분들 사인과 함께 안경도 있었고, 포스터가 있었다. 종이박스에 안에는 여기 밑에 보이는 것처럼 음료수와 빵, 그리고 초콜릿, 사탕등 간식을 많이 넣어주셨다. (덕분에 배불렀다. 아 그리고 저기 에그타르트가 정말 맛있었다.)

들어가기 전에 이렇게 귀여운 캐릭터들이 반겨주었다.(사진 찍으니까 발을 저렇게 엣쥐-☆ 잇게 포즈를 취해주심 ㅎㅎ 귀여워) 그래서 신나서 여러장 찍고 돼지바 하나 먹으면서 돌아다녔다. 

조금 있다가 앉아서 쉬고 있는데 토크콘서트가 시작되었다.

첫번째 강의는 김형진 멘토(에누마 크리에이티브 디렉터)

1,. 국영수를 잘해야 한다고 강조하셨는데 그 이유는 수학은 세상을 논리적으로 이해할 수 있도록 도와주는 학문이기 때문에 힘 닿는 곳까지 열심히 하라고 조언해주셨다. (완전 찔림 교과공부는 잠시 뒤로 미루고 있었던 나를 반성했다...ㅎ) 프로그래밍 언어도 결국 소통하고 하고 협업하고 이해시키는 것. 프로그래밍 하면서 남을 도울 수 있다는 것을 알기 바람.

 

2. 게임베이스러닝의 장점

장애인이나 사회적으로 어려움을 겪고 있는 사람들에게 도움을 주는 교육게임을 설명해주셨는데 너무너무 신기했다. 

평소에 게임하는 것을 좋아했기 때문에 관심분야였는데 취미뿐만이 아니라 진짜 사람들 실생활에서 게임을 톻해 교육을 받고 도움을 받고 있다는 것이 너무 신기했다.

 

2번째 강의는 오상훈 멘토(럭스로보 대표)

1. 팀원들과 사용하는 사람들이 행복해할 것을 생각하며 지속해 나가는 것이 창업의 원동력이라고 하셨다.

(솔직히 이분의 강의가 가장 기억에 남았던 것 같다. 왜냐하면 지금의 오상훈 멘토님의 모습이 내가 어른이 되었을때 되고 싶은 모습에 가까워서 ////...ㅎㅎ)

 

3번째 강의는 김동건 멘토(넥슨 데브캣스튜디오 프로듀서)

1. 사람에 대한 이해가 가장 중요하다고 강조하셨다.

2. '게임을 만들다'라는 것은 '나의 스토리를 코딩하다'

청소년기의 삶과 체험이 게임을 만드는데 중요한 재료이니 잘 관찰하고 잘 간직하기!

 

4번째 강의는 남세동 멘토

1.스타트업은 남들이 안될거 같다고 하는 것을 하는 것이라고 하셨다.(지금 다시 보니 완전완전 동의하는 바이다.)

2. 자신의 말투를 모두 구현하는 ai가 나오게 될 것이라며 딥머닝하는 걸 보여주셨는데 너무너무너무 신기했다.

 

마지막은 q&a. 타임이었다.(좀 지나서 흐릿하지만 기억을 되짚어보면)

Q1 .여성의 비중의 낮은데 혹시나 배움의 속도가 조금 더딘가요? (아무래도 아직까지는 이 분야는 여성보다는 남성에 비율이 조금 더 높기 때문에 프로그래머를 희망하는 많은 여성들이 건넨 질문이었다. ) - 사실 내가 제일 궁금했다...ㅎㅎ

A. 대학교 가면 과탑은 다 여자. 여성 프로그래머들에게 더 기회가 많아질 것이라며 여성프로그래머들을 통해 it시장이 더욱 넓어질 것.

 

Q2. 게임을 만들고 싶은 데 어떤 언어를 배워야 하나요?

A. 논리적 설계와 거기에 가장 적합한 언어를 선택하는 것이 중요하기 때문에 딱히 하나를 정할 수는 없음.

 

Q3. 좋은 프로그래머가 갖춰야 할 점

A. 코딩보다 커뮤니케이션 역량이 더 중요하며, 빅데이터와 aI의 시대가 오고 있기 때문에 데이터를 바라보는 시선이 중요하고 또한 새로운 기술에 관심을 두고 있어야 함.

 

Q4. 코딩 배우는 (하는) 속도가 느려요

A. 분위기에 연연하지 말고 주변사람들과 즐겁게 코딩하자.

 

오래 꿈꿔왔지만 프로그래밍은 한지 얼마되지않아 제대로 갈피가 잡히지 않았는데 토크콘서트를 통해 조금은 선명해진 거 같아서 너무 유익했다. 여러멘토들의 강의를 들으며 새로운 목표도 가지게 되었고, 코딩 뿐만아니라 새로운 기술들에 관심을 가져야 겠다고 생각했다. 나와 같은 꿈을 꾸는 친구들이 이렇게나 많다는 것을 알게되니 더 열심히 해야겠다는 다짐도 들었고, 나중에 꼭 만나서 좋은 프로그램을 만들었으면 좋겠다는 생각이 들었다.

 

그 중에 딥러닝이 제일 신기했다. 꼭 배워보고 싶다. 다음 토크콘서트에도 꼭 참석하고 싶다.

반응형
반응형

앞에 썼던 후기에서 언급한 첫번째 해커톤 후기이자 정말 할말이 많고 너무 혼파망이었던 후기이다.

설명하자면 해커톤 자체를 잘 몰라서 준비를 하나도 못하고 (심지어 준비물조차 제대로 몰랐다.) 헐레벌떡 나간 대회였다. 

위에 있는 노란 티셔츠가 해커톤에서 준 티셔츠이다. 고등부는 노란색, 일반부는 검은색이었다. (사실 노란색보다 검은색이 더 예뻤다.) 등 뒤에는 data revolution 이라는 문구가 적혀있었다.  

해커톤이 처음이라서 뭐를 들고 가야 할지 몰라서 노트북만 달랑 챙겨갔는데 해커토너들이 쾌적한 환경에서 개발할 수 있도록 에어컨을 빵빵하게 켜놓으셔서 그런지 너무 추웠다. (이 이후로는 해커톤 나갈 때 무조건 담요나 겉옷을 꼭 챙긴다.)

 

2박3일동안 진행된 해커톤이었는데 말이 2박 3일이지 사실 무박 5일이었다. 잠을 아예 안자는 건 아니었지만 잠을 자려면 개발하는 장소 이외에 임시로 마련되어있는 공간에 간이 침대에서 쪽잠을 자거나 책상에 엎드려 자면서 부족한 잠을 보충했다.

밥은 아침, 점심, 저녁 전부 제공되었는데 장소가 워낙 좋아서 밥도 잘 나왔고, 야식에 간식까지 풍족했다. 내가 지금까지 간 해커톤 장중에 여기가 가장 좋았는데 그 이유가 외부와 단절되어있고, 매우 넓다는 것이었다. 

 

가장 큰 문제는 전혀 준비되지 않은 실력이었다. 안드로이드 스튜디오를 사용하여 만들려고 했으나 자바도 제대로 하지 못했고, 주제도 명확하지 않아서 진행에 차질이 생겼다. 그러다 멘토링 시간에 불가능하다며 접고 앱인벤터를 사용하라는 조언에 바로 안드로이드 스튜디오를 접고 훨씬 쉬운 앱인벤터를 사용하여 제작하기 시작하였다. 약 10시간에 걸쳐 허겁지겁 코딩을 하고 디자인을 하고 그걸 붙이고 발표연습까지 해야해서 매우 바쁘게 움직였다. 

 

뭐 결과는 역시나 준비한 만큼 나왔다. 예상한대로 수상을 하지 못했고, 정말 많은 것을 깨닫게 해준 대회였다. 이 대회에 참가한 다른 팀들을 보면서 지금 내 또래의 친구들이 얼마나 열심히 하고 있는지 그리고 또 얼마나 잘하는지, 내가 우물안에 개구리였다는 것을 알 수 있었던 좋은 기회였다. 

반응형
반응형

이번년도 7월에 처음 나간 해카톤 이후로 (물론 7월에 나간 해커톤은 나중에 올리도록 하겠다. 할말이 많기 때문에) 준비의 필요성을 처절하게 깨닫고ㅠㅠ 각성하여 이번 해커톤을 열심히 준비했다.

 

이번 해커톤의 주제는 사람의 행복하게 하는 소프트웨어여서 친구들과 아이디어 회의 후 초고령화 사회에서 가장 화두 되고 있는 질병인 '치매'를 보안할 수 있는 소프트웨어를 만들기로 했다. 나는 개발과 디버깅을 하는 프로그래머 맡았다.

 

우리의 계획으로는 사용자 앱과 보호자 앱 그리고 하드웨어로 구성되어 있다.  사용자 앱과 보호자 앱간에 연동이 필요하기 때문에 쉽고 무료로 사용이 가능한 파이어베이스를 이용하였다. (파이어 베이스나 앱인벤터나 공용계정이 있으면 정말 좋은 것 같다.) 그리고 하드웨어의 주요기능인 거리측정과 버튼을 구현하기 위해 신호강도는 거리의 반비례하는 것블루투스 4.0을 이용해 rssi기능을 사용하였다. (사실은 gps를 사용하려 했는데 밖에서 아무리 오래 있어도 잘 잡히지 않고 실내에서는 이용이 불가하여서 기능을 변경했다....ㅎ)

 

아래 사진은 버튼이다

아두이노 버튼

아래 사진은 그 앞에서 언급했던 rssi기능을 위한 블루투스 4.0

아두이노 나노와 블루투스 4.0

그런데 이번 대회가 너무 아쉬운 점 중에 하나가 장소가 벡스코 라는 것이다. 저번에 나간 해커톤은 대학에서 진행되어서 무박 3일을 하였는데 이번 해커톤은 집으로 귀가했다가 그 다음날 아침에 다시 와야 하고 또 고작 2일동안 진행되어서 시간이 매우 촉박했다. 그리고 sw교육대전이 진행되고 있는 전시장의 가장자리의 위치하였는데 옆에서 어떤 행사를 하고 있어서 너무 시끄러웠다.ㅠㅠ 노래가 크게 계속나오고 사람들이 대회장을 기웃기웃거리고 신경 안쓸라고 했지만 신경이 쓰이는 건 사실이었다.ㅠㅠ

 

그렇지만! 괜찮았던 점은 밥이 선택할 수 있는 범위가 조금 넓고 책상이 정말 컸다. 하루하루 주는 간식도 맛있게 먹었고, 오히려 짧은 기간이어서 더 많은 집중력을 쏟을 수 있기도 하였다.

해커톤 현장이다

정말 많은 학교에서 다양한 친구들이 자신들의 아이디어를 실현하기 위하여 해커톤에 참여했다. 위에 사진처럼 열심히 한 흔적 해커톤 티 색깔이 빨간색이었는데 이 색이 나름 마음에 들었는데 이에 가장 큰 이유가 에 사람이 엄청 많았는데 많은 인파속에서 가장 확! 보였기 때문이다.

 

첫날 집가는 길은 너무 아쉽기도 하면서도 시간이 부족하다는 생각이 들었다. 가면서도 끊임없이 친구들과 해커톤 관련한 개발 이야기를 나눴다.

 

둘째날은 어떻게 흘러갔는지도 기억이 안 날정도로 촉박하고 빠르게 진행되었다. 1시에 발표가 있어서 개발한 소프트웨어를 마무리 디버깅 후에 디자인을 삽입했다. 그리고 나서 재빠르게 ppt를 만들고 발표 연습을 했다.

(발표 제출하는데 글꼴이 깨져서 엄청 고생했다는 tmi..ㅠㅠㅠ 글꼴저장을 눌렀는데도 깨져서 글꼴파일까지 보내서 간신히 성공ㅠㅠ)

 

 

시연동영상

 

준비한 모든팀의 발표를 듣고 우리팀이 제작한 제품을 발표하러 갔는데 너무 긴장이 되었다.ㅠㅠ 시간이 촉박해서 발표대본도 만들지 못하고 연습도 제대로 해보지 못해서 실제 발표할 때 너무 떨어서 팀원들한테도 너무 미안했고 내 자신도 너무 스스로에게 실망했던 것 같다ㅜㅠ그래도 팀원들이 다독여주고 위로해줘서 조금 나아졌지만 다음번에는 제대로 대본도 만들어서 열심히 연습해 발표해야 겠다고 다짐하는 계기가 되었다.

발표현장

해커톤이 다 끝나고 잘 되지 않았던 gps를 다시 도전하였다. 실내에서는 전혀 잡히지 않아서 밖에서 오들오들 떨면서 10분동안 기다렸지만 끝내 실패했다.ㅠㅠ 다음번에 기회가 된다면 다시 도전해서 꼭 성공하고 싶다.

혹시 해커톤 나가기를 주저하거나 두려운 사람들이 본다면 걱정말라고 얘기 해주고 싶다. (물어봐도 됩니당~)이 해커톤은 집으로 귀가하는 해커톤이었지만 보통의 해커톤은 무박으로 이루어지며 그 장소에서 최소 2일동안 있기 때문에 준비를 잘 해가길 빈다. 나의 경우에는 수건과 담요 그리고 각종 샤워도구(샴푸, 바디워시), 여벌의 옷을 들고 가는 것이 좋다. 모니터와 키보드는 선택이지만 들고 갈 경우 매우 좋다. 특히 자는 경우 담요!! 꼭 들고 가길 바란다. 제발 아니면 걸칠 잠바를 가져가는 것도 좋다.

 

이렇게 나의 두번째 해커톤이 끝이났다. 처음보다는 나았지만 다음에 또 해커톤을 나갈때는 이번보다 더 발전하는 모습을 보여야 겠다고 다짐했다.

 

 

반응형
반응형

삽입정렬이란?

주어진 원소들을 하나씩 뽑은 후, 나열된 원소들이 항상 정렬된 형태를 가지도록 뽑은 원소를 바른 위치에 삽입하여 나열하는 정렬방식

 

삽입정렬의 특징 

1. 입력이 거의 정렬된 경우 빠른 수행시간을 보인다.

2. 안정적인 정렬이다.

-  두 데이터가 정렬되지 않은 경우에만 교환이 일어난다.

3. 제자리 정렬이다.

- 데이터를 움직이는 경우는 두원소를 서로 교환하는 경우밖에 없으므로, 데이터가 저장된 공간 이외에 별도 공간을 상수 개만 사용한다.

 

뽑은 원소를 어떻게 바른 위치에 삽입할 수 있을까?

- 컴퓨터에서는 나열된 원소를 하나씩 차례대로 비교하면서 삽입된 위치를 찾을 수 있다.

 

#include<stdio.h>
int temp, n= 10;
InsertSort(int A[],int n){
	for(int i = 0; i<n; i++){
		for(int j = i; j>0 && A[j]<A[j-1]; j--){ //정렬된 원소들과 비교 
			temp = A[j]; // 원소를 서로 교환 
			A[j] = A[j-1];
			A[j-1] = temp;
		}
		printf("%d단계를 출력 :", i);
		for(int k=0; k<n; k++){ //정렬되는 과정 출력 
			printf("%d ", A[k]);
		}
		printf("\n");
	}
}
int main(){
	int n = 10; //원소의 개수 
	int A[10]; //정렬 선언 
	printf("입력하세요 :");
	for(int i= 0; i<n; i++){ //정렬할 배열 입력하기 
		scanf("%d",&A[i]);
	}
	InsertSort(A, n);
	for(int i=0; i<n; i++){
		printf("%d ", A[i]); //정렬완료
	}
}
/*
입력하세요 :5 4 3 2 1
0단계를 출력 :5 4 3 2 1
1단계를 출력 :4 5 3 2 1
2단계를 출력 :3 4 5 2 1
3단계를 출력 :2 3 4 5 1
4단계를 출력 :1 2 3 4 5
1 2 3 4 5
--------------------------------
Process exited after 3.268 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

정렬 공부하면서 느꼈던 건데 내 입장에서는 단순하게 오름차 or 내림차순으로 정렬하면 되니까 쉽다고 생각되는데 컴퓨터로 구현해보면 생각보다 복잡함.(대충알면 쉽다고 느껴지는데 공부할 수록 때려치고 싶음.) 특히 자료구조 시험을 치면서 느낀건데 대충 정렬 안되어있는 상태에서 오름차순으로 정렬할때까지 몇단계가 필요한가? 이런 문제는 비교적 쉬운데 초기 상태에 숫자들이 많다거나 아니면 어떤수가 어디에 위치되어 있는 경우는 몇단계인가? 이런식의 질문은 많이 화가남. 특히 중간에서 계산실수하면 멘탈나가는거임. 신기한 건 나이를 먹어갈 수록 사칙연산을 못하는 거 같은 느낌 이상하다. 왜 반비례하는 건지 사칙연산은 초등학교 2학년때 가장 잘했던 거 같다.

반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

선택정렬이란  (0) 2019.09.11
버블정렬  (0) 2019.09.11
최댓값 찾기 알고리즘  (0) 2019.09.03
bfs-dfs  (0) 2019.08.26
행렬을 이용한 BFS (c)  (0) 2019.08.20
반응형

먼저 파이어베이스에 접속하여 로그인한다. 

파이어베이스 주소 : https://firebase.google.com/?hl=ko

 

Firebase

Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다.

firebase.google.com

 

먼저 콘솔로 이동을 클릭한다. 그리고 자신의 프로젝트를 선택하여 들어간 뒤 

옆에 톱니바퀴 우리가 흔히 설정의 아이콘으로 알고 있는 저 익숙한 아이콘을 선택하면 프로젝트 설정과 사용자 및 권한이 나오게 되는 데 그 중에 '프로젝트 설정'을 누르면 된다.

그 후 서비스 계정을 누르고 밑으로 내려보면 '데이터베이스 비밀번호'라고 써 있는 곳이 있는데 거기를 클릭한다.

클릭하면 저렇게 비밀번호가 동그라미로 나오게 되는 데 가장 오른쪽에 마우스를 가져다 놓으면 표시라는 것이 뜨게 된다. 그것을 꾹 클릭하면 복사하기 라는 아이콘이 나오는데 그걸 클릭한 후 저기 아두이노 코드에 붙여넣기 하면 된다.

 

 

여기서 환경설정(Ctrl + Comma)를 누른다. 그러면 

이런 화면이 나오게 되는데 여기서 저기 추가적인 보드 매니저 URLs 줄에 있는 파란색 네모를 누른다(네모 두개 겹쳐져있는 거 말하는 거임.)

그걸 누르면 

이런 화면이 나오는데(원래 있었는데 설명하느라 지워버림. ㅎ) 저 화면 흰색 부분에 http://arduino.esp8266.com/stable/package_esp8266com_index.json 를 삽입하고 확인을 누른다.

 

+ 2020-11-26

요즘 새로 파이어베이스 라이브러리가 바뀌면서 기존코드가 안되고 있는 상황이라고 들었는데 그래서 나도 열심히 여러 사람들의 포스팅을 참고해서 보드 매니저에 dl.espressif.com/dl/package_esp32_index.json

도 추가해보고 툴-> 보드매니저에서 esp8266를 검색해서 설치했더니 된다. (진짜 식은땀 좔좔)

 

툴 -> 라이브러리 관리를 눌러준다. 그러면 

이런 화면이 나오는데 여기서 json 이라고 친다. 그러면 ArduinoJson by Benoit Blanchon를 누르고 설치를 눌러준다.

 

그리고 나서 파이어베이스 라이브러리를 추가해줘야하는데

https://github.com/mobizt/Firebase-ESP8266

 

mobizt/Firebase-ESP8266

ESP8266 Firebase RTDB Arduino Library. Contribute to mobizt/Firebase-ESP8266 development by creating an account on GitHub.

github.com

여기로 들어가서 다운받으면 된다. 하지만 나는 귀찮고 이 글을 보시는 분들중에 아주 귀찮아 하시는 분들이 있을 수 있으니까 파일을 올려드리겠습니다.

Firebase-ESP8266-master.zip
0.14MB

이걸 다운받으신 후에 'libraries'폴더 안에 압축을 풀면 된다. (사람마다 경로가 다를 수 있다. 왜냐하면 아두이노를 어디에 설치했는지 모르니까?)

 

풀코드 

#include <ESP8266WiFi.h>
#include "FirebaseArduino.h" // 파이어베이스 라이브러리

#define FIREBASE_HOST "파이어베이스아이디"
#define FIREBASE_AUTH "비밀번호"
#define WIFI_SSID " "
#define WIFI_PASSWORD " "

#include "DHT.h"
#define DHTPIN 5     // what digital pin we're connected to
#define DHTTYPE DHT11  // DHT 22  (AM2302), AM2321
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);

  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

  Serial.println("DHT11 test!");
  dht.begin();
}

int n = 0;

void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.print("Error");
    return;
  }
  Firebase.setFloat("Humidity",h);
  Firebase.setFloat("Temperature",t);

  
  n++;
  // set value
  Firebase.setFloat("number", n);
  // handle error
  if (Firebase.failed()) {
      Serial.print("setting /number failed:");
      Serial.println(Firebase.error());  
      return;
  }
  delay(1000); 
}

 

 

반응형
반응형

선택정렬이란?

주어진 원소 중에서 가장 작은 킷값을 갖는 원소를 선택하여 차례대로 나열하는 정렬방식. 그러니까

처음부터 끝까지 비교해가면서 가장 작은(큰) 수를 찾아 순서대로 만들어 간다.

 

선택정렬의 특징

1. 정렬할 원소의 개수가 일정하다면, 언제나 동일한 수행시간이 걸린다.

2. 안정적이지 않은 정렬이다.(삽입정렬과 반대)

ex) 1 5 30 30 25

-> 1 5 30 30 25 

-> 1 5 30 30 25

-> 1 5 25 30 30

-> 1 5 25 30 30 

정렬이 끝난 시점에 30 30이 30 30으로 순서가 바뀌므로 안정적이지 않은 정렬임.

3. 제자리 정렬이다.

#include<stdio.h>
SelectionSort(int A[],int n){
	int Min, temp, i, j;
	for(i= 0; i<10; i++){
		Min = i; //최솟값 설정   
		for(j=0; j<10; j++){
			if(A[j]<A[Min])
				Min = j; //새로운 최솟값  
		}
		if(Min =! i){ 
		//만약 Min이 i가 아닐때 A[i]와 A[Min] 교환  
			temp = A[i];
			A[i] = A[Min];
			A[Min] = temp;
		}
        printf("%d단계를 출력 :", i);
		for(int k=0; k<n; k++){ //정렬되는 과정 출력 
			printf("%d ", A[k]);
		}
		printf("\n");
	}
}
int main(){
	int A[10];
	printf("입력하세요:");
	for(int i=0; i<10; i++){
		scanf("%d",&A[i]);
	}
	SelectionSort(A, 10);
	for(int i=0; i<10; i++){
		printf("%d",A[i]);
	}
}
/*
입력하세요 :1 3 2 5 4 7 6 0 8 9
0 1 2 3 4 5 6 7 8 9
--------------------------------
Process exited after 1.416 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

아마 버블정렬이랑 함께 내가 가장 많이 쓰는 정렬이지 않을까 싶음. 이유는 나도 모르겠음. 근데 C++과 파이썬 그리고 자바 등등으로 넘어가면서 정렬하는 그런 기본적인 코드에 대한 생각을 안한지는 진짜 오래된듯. 그래서 지금 이렇게 보니까 되게 새로움. 그렇다고 다시 공부하겠다거나 그런 생각은 들지 않을 거라 생각하긴 했는데 진짜 신기하기만 하고 그때 열심히 공부했던 게 떠올라서 별로..라는 생각이 드네^^

반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

삽입정렬이란  (0) 2019.09.16
버블정렬  (0) 2019.09.11
최댓값 찾기 알고리즘  (0) 2019.09.03
bfs-dfs  (0) 2019.08.26
행렬을 이용한 BFS (c)  (0) 2019.08.20
반응형

정렬은 오름차순 또는 내림차순으로 이루어지는데, 특별한 언급이 없으면 오름차순 정렬을 기본으로 한다.

 

버블정렬이란?

주어진 리스트의 왼쪽에서부터 모든 인접한 두 원소를 순서대로 비교하면서 자리바꿈을 통해 정렬된 순서를 맞추는 것을 반복함녀서 정렬하는 방식.

 

 - 이름의 유래 -

이웃한 값끼리 비교하여 교환하는 모습이 마치 거품이 보글보글하는 모양과 비슷하다고 해서 붙여진 이름임.

 

버블정렬의 특징 

1. 선택정렬에 비해 원소의 교환이 많이 발생하여 비효율적이다.

2. 안정적인 정렬이다.

- 인접한 두 데이터가 정렬되지 않은 경우에만 교환이 일어나므로 킷값이 같은 겨웅에는 교환이 일어나지 않는다.

3. 제자리 정렬이다.

- 데이터가 움직이는 경우는 두 원소를 서로 교환하는 경우밖에 없으므로, 데이터가 저장된 공간 이외에 별도의 공간을 상수 개만 사용한다. 

#include<stdio.h>
int BubbleSort(int A[],int n){
	int BOUND, temp, top, j;
	BOUND= -1;
	do{
		top = n;
		for(j=top-1; j>BOUND; j--){
			if(A[j]<A[j-1]){
				temp = A[j];
				A[j] = A[j-1];
				A[j-1] = temp;
				top = j;
			}	
            printf("%d단계를 출력 :", i);
			for(int k=0; k<n; k++){ //정렬되는 과정 출력 
				printf("%d ", A[k]);
			}
		printf("\n");
		}
		BOUND = top;
	}while(top<n);
}

int main(){
	
	int n = 10;
	int A[10];
	printf("입력하세요 :");
	for(int i= 0; i<n; i++){
		scanf("%d",&A[i]);
	}
	BubbleSort(A, n);
	for(int i=0; i<n; i++){
		printf("%d ", A[i]);
	}
}
/*
입력하세요 :1 3 2 5 4 7 6 0 8 9
0 1 2 3 4 5 6 7 8 9
--------------------------------
Process exited after 8.36 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/

선택정렬 다음으로 제일 많이 사용하는 버블정렬.

그렇게까지 효율적이지도 않은데 많이 사용했었음. 이유는 없다. 그냥 이름이 귀여워서 그런가 물론 실제로는 귀엽지 않지만^^ 이름이라도 귀여우니까^^

반응형

'2019~2020 > 자료구조' 카테고리의 다른 글

삽입정렬이란  (0) 2019.09.16
선택정렬이란  (0) 2019.09.11
최댓값 찾기 알고리즘  (0) 2019.09.03
bfs-dfs  (0) 2019.08.26
행렬을 이용한 BFS (c)  (0) 2019.08.20

+ Recent posts