CODING TEST/programmers
Day4 - 홀짝에 따라 다른 값 반환하기
iamyuunzo
2025. 7. 11. 10:04
📌 문제 정보
- 문제 이름 : 코딩 기초 테스트 - 홀짝에 따라 다른 값 반환하기
- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181935
📌 문제 요약
- 핵심 조건: 양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return
- 제한: 1 ≤ n ≤ 100
📌 내 풀이 및 코드
class Solution {
public int solution(int n) {
int sum = 0;
if (n % 2 == 1) {
for (int i=1; i<=n; i++) {
if (i % 2 == 1) {
sum += i;
}
}
} else {
for (int i=1; i<=n; i++) {
if (i % 2 == 0) {
sum += i * i;
}
}
}
return sum;
}
}
- if, for문을 쓰는 것까지는 맞았는데 자꾸 다른 값이 나와서 힌트를 물어봄.
- 나는 for문 안에 그냥 냅다 sum 식을 넣었는데, 문제 조건인 홀수면 홀수만 더하고 짝수면 짝수 제곱만 더하는 것까지 고려하지 못해서 sum 식이 돌아갈 때 짝수, 홀수 구분 없이 식이 계산되고 있어서 틀린거였음.
📌 다른 사람들 풀이
// 1
int answer = 0;
for(int i = n; i >= 0; i -= 2)
answer += (n % 2 == 0) ? i * i : i;
return answer;
// 2
if (n % 2 == 1) {
return (n + 1) * (n + 1) / 2 / 2;
} else {
return 4 * n/2 * (n/2 + 1) * (2 * n/2 + 1) / 6;
}
}
<-- 다른 풀이 요약 -->
- 1 : 삼항연산자를 사용한 반복문.
- 2 : 수학 공식을 이용한 풀이.
- 홀수일 때
- 1부터 n까지 홀수의 합 = (1 + 3 + 5 + ... + n)
- n이 홀수이면, 1부터 n까지 홀수의 갯수는 (n + 1)/2
- 이 수열의 합은 (첫 항 + 마지막 항) * 항의 개수 / 2 → 식 정리하면 (n + 1)^2 / 4
- 짝수일 때
- 1부터 n까지 짝수 제곱의 합 = 4 * (1^2 + 2^2 + ... + k^2)
- k = n/2 → 1부터 k까지 제곱합 공식 사용: k(k + 1)(2k + 1)/6
| 버전 | 속도 | 가독성 | 실수 위험 |
| 처음 버전 (내 코드) | 느림 (O(n)) | 아주 직관적 | 실수 적음 |
| for문 최적화 (1) | 중간 (O(n/2)) | 직관적 | 실수 적음 |
| 수학 공식 (2) | 가장 빠름 (O(1)) | 직관성 ↓ | 수학식 실수 가능 |
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
- 문법은 따로 없고, Day4 문제를 풀 때 느낀건 삼항연산자를 써서 간단하게 쓰는 사람들이 많았다는 것.. 나도 삼항연산자로 풀 수 있는 문제면 그걸 활용하도록 노력해봐야겠다!