시작하기, 뭐든

코딩테스트 뿌시기 4 - 월간 코드 챌린지 시즌3 없는 숫자 더하기 풀이 본문

코딩테스트

코딩테스트 뿌시기 4 - 월간 코드 챌린지 시즌3 없는 숫자 더하기 풀이

Gascon 2022. 1. 10. 22:27

시작하기, 뭐든 - 기록 22일차

 

오늘 푼 문제는 레벨1의 없는 숫자 더하기 풀이!

 

코딩테스트 문제 중에서 가장 설명이 짧고 깔끔했던 문제가 아닌가 싶다.

[문제]
0부터 9까지의 숫자 중 일부가 들어있는 배열  numbers가 매개변수로 주어집니다. 
numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

길고 길었던 문제들을 읽다가 이번 문제를 읽으니 응??이게 끝인가??했다.

(그렇다고 쉽다는 얘기는 아니지만..ㅜㅜ)

 

각설하고, 문제 풀이를 해보자.

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int[] num = {0,1,2,3,4,5,6,7,8,9};
        
        for(int i=0; i<numbers.length; i++) {
            int value = numbers[i];
            if(value==num[value]){
                num[value] = 0;
            }
        }
        for(int sum : num) {
            answer += sum;
        }
        return answer;
    }
}

이번에도 나는 초딩도 이해할 수 있는 노가다성 직관적인 코드를 짰다;;

0부터 9까지 들어있는 int 배열을 만들고, numbers의 값을 index로 가지고 있는 값을 찾아서 0으로 바꿔줬다.

int 배열 num은 index와 값이 같아서 쓴 꼼수...ㅎㅎ

List를 사용해서 remove를 시켜줄까도 했었는데 최대한 import없이 풀기 위해 그냥 int배열을 만들고 값을 0으로 바꿔버렸다.

 

이중포문을 쓰기 싫어서 별도 for in문으로 num 배열을 더해주면 끝!

 

코드를 짜면서도 좋은 코드가 아님은 직감하고, 다른 사람 풀이를 얼른 보러갔다.

그 중에 감탄을 금치 못했던 풀이 하나.

JongbaekGwak , dev-Parkian , 노현진 , ads0070 , jhs 외 251 명
class Solution {
    public int solution(int[] numbers) {
        int sum = 45;
        for (int i : numbers) {
            sum -= i;
        }
        return sum;
    }
}

와...이건 보자마자 응???이렇게 짧게 끝낼 수 있다고???????하면서 계속 봤던 코드

 

이 문제는 어차피 없는 숫자의 합을 구하는 문제다.

0부터 9까지 전부 더한 값으로 시작해서 일치하는 숫자들만 빼주면 끝나는 것이었다!!!!!

세상에...세상에..!

정말정말정말 너무너무 멋있다. 나도 이런 유연한 생각을 할 수 있게끔 더 노력해야겠다!

 

퇴근 후에 푸는 코딩테스트는 피곤하지만, 이런거 발견하면 괜히 부럽고 신나고 신기하고..!

오늘도 어제보다는 조금 더 성장했으리라 믿으면서 내일도 힘내보자!!!!

Comments