
Solution 1) 내 풀이
class Solution {
public int solution(int[] num_list) {
int answer = 0;
for (int i = 0; i < num_list.length; i++) {
while (num_list[i] != 1) {
if (num_list[i] % 2 == 0) {
num_list[i] /= 2;
answer++;
} else {
num_list[i] = (num_list[i] - 1) / 2;
answer++;
}
}
}
return answer;
}
}
Solution 2) 다른 사름의 풀이
class Solution {
public int solution(int[] num_list) {
int answer = 0;
for (int num: num_list) {
while(1 < num) {
num /= 2;
answer++;
}
}
return answer;
}
}
코드 및 문제 리뷰
배열 안의 모든 요소들이 조건에 따라 1이 될 때 까지 반복하고, 각 요소별로 1이 될때 까지 소요된 반복 횟수를 합해 반환하는 문제이다.
나는 조건이 두개라고 생각했는데 다른 사람의 풀이를 보니 조건을 한개로 끝내는 모습들이 보였다.
조건 중 "홀수인 경우엔 요소에서 1을 뺀 뒤 2로 나눔"이라 돼 있다. 하지만 int형의 계산이라 어차피 그 수가 홀수여도 2로 나눈 나머지는 버려진다. ((5 - 1) / 2)나 (5 / 2)나 결과는 2로 같다.
그 결과 조건문을 하나로 코드가 굉장히 간결해졌다. 코딩테스트간 문제의 조건을 꼭 따라야한다고 생각했는데, 이런 숨겨진 의도도 파악해 더욱 간결하고 좋은 코드를 작성할 수 있게 해야겠다.
'연습문제 > 프로그래머스, 기초 트레이닝' 카테고리의 다른 글
| [프로그래머스 기초_java] 원하는 문자열 찾기 (0) | 2023.10.31 |
|---|---|
| [프로그래머스 기초_java] 길이에 따른 연산 (0) | 2023.10.31 |
| [프로그래머스 기초_java] 조건에 맞게 수열 변환하기 2 (0) | 2023.10.31 |
| [프로그래머스 기초_java] 조건에 맞게 수열 변환하기 1 (0) | 2023.10.31 |
| [프로그래머스 기초_java] 수열과 구간 쿼리 1 (0) | 2023.10.30 |