[코딩테스트연습] 코딩테스트 입문 > Lv.0 연속된 수의 합
2024. 3. 23. 13:23ㆍ코딩 테스트/[프로그래머스] Java
문제 설명
문제 풀이
가장 먼저 떠오른 생각은 바로 total을 num으로 나눈 값이 result의 중간 값이 된다는 것이었다.
이 규칙을 활용해서 어떻게 해결할지 고민해보았다.
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int center_val = (int)total/num;
int center_idx = (int)num/2;
if(num%2!=0){ //num이 홀수인 경우,
//중간~끝
for(int i=center_idx; i<num; i++){
answer[i] = center_val;
center_val++;
}
center_val = (int)total/num;
center_idx = (int)num/2;
//시작~중간
for(int i=center_idx; i>=0; i--){
answer[i] = center_val;
center_val--;
}
}else{ //num이 짝수인 경우,
center_val = (int)total/num+1;
//중간~끝
for(int i=center_idx; i<num; i++){
answer[i] = center_val;
center_val++;
}
center_val = (int)total/num+1;
center_idx = (int)num/2;
//시작~중간
for(int i=center_idx; i>=0; i--){
answer[i] = center_val;
center_val--;
}
}
return answer;
}
}
다른 사람의 풀이를 보고 나니 멍...했다
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int check = num*(num+1) / 2;
int start = (total - check) / num + 1;
for (int i = 0; i < answer.length; i++) {
answer[i] = start + i ;
}
return answer;
}
}
등차수열 공식을 사용해서 가장 마지막 수를 check로 구한다.
이후 수열을 시작하기 위해 total-check를 /num으로 나눈 후 1을 더해서 시작 값을 구한다.
시작과 끝 값을 구했으니, for문을 이용해서 하나씩 넣어주면 끝이다..
여러 문제들을 풀다보니 수학적 머리가 필요함을 절실히 깨닫는 중이다..😭
'코딩 테스트 > [프로그래머스] Java' 카테고리의 다른 글
Lv.0 대문자로 바꾸기 (0) | 2024.03.24 |
---|---|
[코딩테스트연습] 코딩테스트 입문 > Lv.0 다음에 올 숫자 (0) | 2024.03.23 |
[코딩테스트연습] 코딩 기초 트레이닝[PCCE 기출문제] 8번 / 창고 정리 (0) | 2024.03.23 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 두 수의 연산값 비교하기 (0) | 2024.03.23 |
[코딩테스트연습] 코딩테스트 입문 > Lv.0 조건에 맞게 수열 변환하기 1 (0) | 2024.03.23 |