문제 설명
양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.
제한 사항
1 ≤ n ≤ 100
나의 코드
class Solution {
public int solution(int n) {
int answer = 0;
if(n%2==1) {
for(int i=0; i<=n; i++) {
if(i%2==1) {
answer += i;
}
}
} else if(n%2==0) {
for(int i=0; i<=n; i++) {
if(i%2==0) {
answer += i*i;
}
}
}
return answer;
}
}
다른 사람 코드
class Solution {
public int solution(int n) {
int answer = 0;
if (n % 2 == 0) {
for (int i = 2; i <= n; i += 2) {
answer += i * i;
}
} else {
for (int i = 1; i <= n; i += 2) {
answer += i;
}
}
return answer;
}
}
반복문에서 i++
대신 i+=2
로 반복을 줘서 내가 짠 코드보다 간단
class Solution {
public int solution(int n) {
int answer = 0;
for(int i = n; i >= 0; i -= 2)
answer += (n % 2 == 0) ? i * i : i;
return answer;
}
}
삼항 연산자 사용
class Solution {
public int solution(int n) {
int answer = 0;
if (n % 2 == 0)
for (int i = 2; i <= n; i += 2) answer += Math.pow(i, 2);
else
for (int i = 1; i <= n; i += 2) answer += i;
return answer;
}
}
Math.pow()
함수 사용
import java.util.stream.IntStream;
class Solution {
public int solution(int n) {
return n % 2 != 0 ? IntStream.iterate(1, i -> i <= n, i -> i + 2).sum() : (int) IntStream.iterate(2, i -> i <= n, i -> i + 2).mapToDouble(operand -> Math.pow(operand, 2)).sum();
}
}
Stream과 람다식 활용
느낀 점
살짝만 복잡해져도 사고한대로만 코드를 작성하게 되면서 코드식이 길어진다.
먼저, 머릿속에서 정리 후 어떤 방법이 가장 좋은 코드일 지 고민해보자. Stream과 람다식은 진짜 🤯