Javascript - 프로그래머스 8일차

이율곡·2023년 6월 14일

Programmers

목록 보기
8/44
post-thumbnail

8일차

아직까지 어려운 것은 없었다. 시원시원하게 문제를 풀는 것까지는 아니지만, 그래도 나름 무난하게 풀 수 있었다.

코딩 기초트레이닝 30% 달성했다. 기초트레이닝은 어려운 문제도 풀어 100%를 달성한 후 입문으로 넘어가야겠다.

매일 꾸준히 하면 바위도 부술 수 있다!! 🪨


오늘의 문제

주사위 게임 1

1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.
1. a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.
2. a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.
3. a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.
두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

입출력 예시

abresult
3534
6114
242

이 문제를 오늘의 문제로 선택한 이유는 나의 풀이를 되돌아 보기 위해서 선택했다. 그렇기 때문에 접근방법보다는 내 풀이를 보고 되짚어 보도록 하겠다.

풀이

function solution(a, b) {
    var answer = 0;
    
    if (a % 2 != 0 && b % 2 != 0) {
        return answer = Math.pow(a, 2) + Math.pow(b, 2);
    } else if (a % 2 == 0 && b % 2 == 0) {
        return answer = Math.abs(a - b);
    } else {
        return answer = 2 * (a + b);
    }
}

a, b 둘 다 홀수 일 때와 짝수 일 때를 if문으로 나눠서 풀었다. 여기서 내가 아쉽게 생각한 것은 if문 안의 식이다. 저렇게 넣어서 푸는 것보다 아래의 풀이가 더 나은 것 같다는 생각이 든다.

이상적인 풀이

function solution(a, b) {
    const isAOdd = a % 2 === 1
    const isBOdd = b % 2 === 1

    if(isAOdd && isBOdd) return Math.pow(a, 2) + Math.pow(b, 2)
    if(!isAOdd && !isBOdd) return Math.abs(a - b)
    return 2 * (a + b)
}

isOdd라는 변수를 만들어서 true/false를 반환하는 boolean 형태를 갖도록 했다. 이 풀이 방식이 좀 더 가시적이고 다른 사람이 내 풀이를 보더라도 이해하기 쉽겠다라는 생각을 했다. 쉬운 문제를 풀더라도 조금 다른 접근도 필요하겠다.


정리하기

꾸준하지만 다른 접근도 해보자.

거의 매일 프로그래머스를 하지만 할 때마다 조금씩 드는 생각이 다르다. 어떤 방식으로 접근할 지, 어떤 풀이과정을 접목해야 할 지, 어떤 메서드를 사용해야 할 지 등의 생각이 매일 바뀐다. 8일차는 같은 문제라도 다른 접근도 필요하겠다라는 생각을 가졌다.

그 이유는 다른 접근이 생각의 폭, 범위 등을 넓여주는데 도움이 되지 않을까 하는 생각을 가졌기 때문이다. 그래서 아직 문제가 쉬울 때 다양하게 접근하여 더 큰 문제가 찾아왔을 때 이를 잘 해결하는 사람이 되고 싶다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글