인프런 알고리즘 문제풀이
세 수 중 최솟값 구하기
문제
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년만 꾸준히 해보자. 조급해하지말자. 화이팅
'알고리즘 공부' 카테고리의 다른 글
2. Recursion(2) (0) | 2022.09.16 |
---|---|
2. Recursion(1) (0) | 2022.09.15 |
1. Insertion Sort 삽입 정렬(2) 프로그래머스 k번째수 [JS] (0) | 2022.09.02 |
1. Insertion Sort 삽입 정렬(1) (0) | 2022.09.01 |