알고리즘 공부

[알고리즘] 세 수 중 최솟값 구하기 / 삼각형 판별하기

늦깍이 2022. 5. 14. 19:32

인프런 알고리즘 문제풀이


세 수 중 최솟값 구하기


문제 

100 이하의 자연수 a, b, c를 입력받아 세 수 중 가장 작은 값을 출력하는 프로그램을 작성하세요.(정렬 사용 X)


내 풀이

	//일일이 하나씩 다 비교하기
        if (a > b && b > c) answer = c;
        else if (b > a && a > c) answer = c;
        else if (a > c && c > b) answer = b;
        else if (c > a && a > b) answer = b;
        else answer = a;

코딩의 기본은 짧을수록 좋다고 들었는데, 결과와 무관하게 쓰면서 이상하다... 싶었다. 그러면 선생님의 풀이를 보자.

 

선생님 풀이

	//두개로 나눠서 생각하기(a,b) 
        if (a < b) answer = a;
        else answer = b;
        //a와 b의 관계가 성립되었음
        if (c < answer) answer = c;
        return answer;

훨씬 짧아졌다. 다른 점이라면, 나는 세 개를 한꺼번에 해서 경우 수를 나눴다면, 선생님은 경우의 수를 두 개씩 나눠서 생각했다는 점이다. 그럼 이걸 응용한 문제 삼각형을 보도록 하자.

 


삼각형 판별하기


문제

길이가 서로 다른 a,b,c 세 개의 막대 길이가 주어지면 이 세 막대로 삼각형을 만들 수 있으면 "YES"를 출력하고, 만들 수 없으면 "NO"를 출력한다.

 

내 풀이

최솟값 구하기의 응용 문제이다. 삼각형의 세 변을 알았을 때, 삼각형이 성립되는지 안되는지 판별하는 방법은, 가장 긴 변의 길이가 나머지 두 변의 길이의 합보다 작아야한다. 결국 a, b, c의 최댓값 max을 최솟값을 구했을 때의 방식으로 구한 다음, 최댓값과 나머지 길이의 합을 계산하면 되겠다.

	let answer = "YES",
          max; // let max를 선언한거 뿐임, answer에 여러개를 넣은게 아님
        let total = a + b + c;
        if (a > b) max = a;
        else max = b;
        if (c > max) max = c;
        let two = total - max;
        if (two <= max) answer = "NO";

※ 풀다가 깜짝 놀랜 부분

처음에 let answer = "YES", max;로 되어있어 배열도 아닌 변수에 두 가지 값을 어떻게 넣은거지 하면서 엄청 찾아봤다. 역시 코린이다. let 변수를 여러 개 선언한 거 뿐인데, 완전 바보.

 


마무리

 

알고리즘 공부 시작이다. 늦깍이 학생이고, 일본학과를 공부하다가, 복수전공으로 듣다보니 아무것도 준비하지 못하고 2년을 띵가띵가 보냈다. 늦깍인데 정신이 없다. 아주 그냥. 1년, 1년만 꾸준히 해보자. 조급해하지말자. 화이팅