230102 프로그래머스 없는 숫자 더하기 자바/자바스크립트

샨티(shanti)·2023년 1월 1일
0

코딩테스트

목록 보기
14/35
post-custom-banner

매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅

2023년의 첫 월요일!
사실 어제 코딩테스트 문제를 하나 풀어보긴 했는데 결국엔 풀어내지 못한 채로 남아버렸고ㅠㅠ

오늘 성수 코딩도장에 부랴부랴 와서 새로운 마음으로 예전 문제를 딱 펼쳤는데 너무 쉬운 문제..;;
어쨌든 조금은 가벼운 마음으로 빠르게 풀어낸 '없는 숫자 더하기'

이런 문제의 경우, 약간의 역발상이 쉬운 프로세스를 만들어내곤 한다.
포트폴리오 프로젝트를 할 때도 종종 느꼈던 부분인데, 예를들어 문제에서 '이를 모두 더한 값을 리턴하라'는 문구가 나오면 한번 반대로 생각해보는 것이다.
'모두 더한 값을 리턴할 것인지, 아니면 이를 뺀 값으로도 해결할 수 있는 방안이 있는지'

오늘의 문제 역시 그랬다. 문제에서는 '없는 숫자'의 총 합을 return하라고 했으나 반대로 생각해보면 0부터 9까지의 총 합에서 주어진 array의 총 합을 뺀 값이 결국 없는 숫자들의 합과 동일하기 떄문이다.
나중에 코딩테스트를 실제로 풀게 될 그 날에도 이런 사고방식이 잘 작동하면 좋으련만 ㅎㅎㅎ
평소에 역발상을 연습해 두어야겠다.

프로그래머스 코딩테스트 없는 숫자 더하기


문제.


java solution

0부터 9까지 모두 더하면 45.
예전에 문제를 풀었을 땐 아마 45에서 바로 빼는 방법을 선택했을텐데,
오늘은 문제를 풀기 전 stream.sum()과 같은 메서드가 있는지 찾아보기 위해 array를 만들고 이것 저것 찍어보니 금방 나오길래 바로 활용했다.

그거나 저거나 큰 차이는 없겠지만..ㅎ

다른 풀이를 보니 for로 array의 원소들을 하나씩 빼나가는 사람도 있던데 좋은 방법이라 생각한다.
이번 문제에서야 0~9라는 숫자가 모두 더할법 한 만만한 크기였지만 만약 0부터 2만까지 였다면 일일이 다 더할 순 없으니.

결국 상황에 맞게 잘 변형하면 될듯.

import java.util.*;

class Solution {
    public int solution(int[] numbers) {
        int sum = Arrays.stream(new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}).sum();

        return sum - Arrays.stream(numbers).sum();
    }
}

javascript solution

README에도 메모한 부분인데, reduce를 활용하면 바로 풀릴 것 같아서 적용해봤고 정말 바로 풀렸다.

자바와 동일하게 array를 모두 더하는 방식을 취해서 45 숫자를 도출할까? 싶었는데 굳이.. 라는 생각이 들어서 그냥 45에서 numbers 총합을 빼 주었다.

만약 0~9까지의 합이 아니라 위에서 얘기했듯 0~2만까지의 숫자였다면 과연 for문을 사용하지 않고 해결이 가능했을까? 라는 의문도 드는..
정 안된다 싶으면 for문을 사용해서 빠르게 풀어내얄텐데. 지금으로선 더 나은 방법이 떠오르진 않는다.

function solution(numbers) {
  return 45 - numbers.reduce((pre, cur) => pre + cur, 0);
}

23년 시작! 언제나 시간이야 흐르고 흘러 23년은 지나간 해가 되고, 또다시 새로운 해를 맞이한다 할텐데...
이렇듯 요즘은 해가 바뀌는것에 대해 별 감흥이 없는 듯 하다.
그냥 내 할일을 꾸준히 그리고 미루지 않고 매일 매일 하는 것에 더 초점을 두려 한다.

오늘도 화이팅, 그리고 꾸준히!


profile
가벼운 사진, 그렇지 못한 글
post-custom-banner

0개의 댓글