정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
0 < n ≤ 1000
class Solution {
fun solution(n: Int): Int {
var answer: Int = 0
var condition = n in 1..1000
if (condition){
for(i in 2..n step(2)){
answer += i
}
}
return answer
}
}
내가 해결했던 의식의 흐름
일단 보자마자 어떻게 접근해야 되는지 바로 감이 안 옴.
그러고 보니 수학이랑(사실 공부랑) 이별 한지 10주년 이였다.
드디어 멍청이는 바로 감 안 오는 단계가 왔나 보다~~!
일단 반복문을 써야 할 것 같아서 for 문 문법을 다시 찾아봄
for문 기본 문법
for (item in collection) {
// 반복할 코드
}
Ex)
for (i in 1..10) { // 1부터 10까지 반복
println ("$i" )
}
for (i in 1..변수){ // 1부터 변수까지 반복
println ("$i" )
}
for (i in 1 until 변수){ //1부터 변수 바로 전 까지 반복
println ("$i" )
}
찾아보니까 step 이나 downTo를 사용할 수도 있다.
step : 증가 값을 변경하는 키워드 (step에는 음수는 들어갈 수 없음)
step(2) > 2씩 증가
step(3) > 3씩 증가
for (i: Int in 1..10 step(2)) {
println ("$i" ) // 1,3,5,7,9
}
downTo: 순서를 큰 값 에서 작은 값으로 변경하는 키워드
for (i in 10 downTo 1) {
println ("$i" ) // 10,9,8,7,6,5,4,3,2,1
}
for(i in 10 downTo 1 step(2)) {
println ("$i") //10,8,6,4,2
}
step을 사용하면 되나?
근데 그럼 짝수는 ?
시작을 2부터 하면 되나?
더하는 식 어떻게 짜야하지?
복합 대입 연산자를 쓰면 될 것 같음
이렇게 했더니 해결 할 수 있었당.
class Solution {
fun solution(n: Int) = (0..n).filter { it % 2 == 0 }.sum()
}
.filter와 2로 나눈 나머지가 0 이면 짝수라는 사실을 활용해서 이렇게 간단하게 풀 수도 있었음..
근데 나는 일단 .filter와 .sum() 의 존재조차 몰랐기 때문에
class Solution {
fun solution(n: Int): Int {
var answer: Int = 0
for (i: Int in 0..n) {
if (i % 2 == 0) {
answer += i
}
}
return answer
}
}
이렇게 했어야 할 듯?
class Solution {
fun solution(n: Int): Int {
var result = 0
var input = n
while(input>0) {
if(input%2==0) {
result += input
}
input --
}
return result
}
}
이렇게 while 문을 사용한 분도 있었다.
근데 굳이 n을 input이라는 변수로 한번 더 선언 한 이유를 잘 모르겠음!
while문을 아직 잘 몰라서 그런가???
그래서 Chat GPT 쌤한테 여쭤보고 이해했다
n 을 그대로 사용하면 n값이 변경되면서 혹시나 다른 데에서 n을 사용한다면 문제가 될 수도 있으니까 따로 빼서 한거였음~! 알고 보니 당연한 건데 혼자는 이유를 떠올릴 수 없는 멍청이의 한계~!
class Solution {
fun solution(n: Int): Int {
val half = n / 2
var answer: Int = half * (half + 1)
return answer
}
}
이렇게 반복문 없이 푼 분도 있었다.
이거 어떻게 되는 거지???? 뭔가 엄청 수학적인 느낌임.
그냥 수학에서 짝수의 합을 구하는 방법을 알고 있는 사람은 이렇게 쉽게도 풀 수 있었나 보다
이것도 내 머리로 왜 되는지 모를 것 같아서 똑똑한 GPT 선생한테 물어봤다
val half = n / 2:
n을 2로 나눈 몫을 계산합니다. 이는n이하의 짝수의 개수를 나타냅니다.- 예를 들어,
n이 10이라면half는 5가 됩니다 (짝수는 2, 4, 6, 8, 10이므로 5개).var answer: Int = half * (half + 1):
- 이는 1부터
half까지의 모든 정수의 합을 구하는 공식입니다. 짝수는 2의 배수이기 때문에2 * (1 + 2 + ... + half)와 같습니다.1 + 2 + ... + half는half * (half + 1) / 2이므로, 여기에 2를 곱한 형태가half * (half + 1)입니다.- 예를 들어,
half가 5라면1 + 2 + 3 + 4 + 5 = 15이므로2 * 15 = 30이 됩니다.
n = 10일 때:
half = 10 / 2 = 5- 짝수는 2, 4, 6, 8, 10 (총 5개)
answer = 5 * (5 + 1) = 5 * 6 = 30n = 7일 때:
half = 7 / 2 = 3- 짝수는 2, 4, 6 (총 3개)
answer = 3 * (3 + 1) = 3 * 4 = 12
(다른 사람 풀이를 보면서 몰랐던 함수나 키워드 등 더 공부할 목록 적어두기)