[프로그래머스] 124 나라의 숫자

Jaedeok Lee·2021년 8월 13일
0

프로그래머스

목록 보기
4/4
post-thumbnail

📃 문제 링크

연습문제>124 나라의 숫자

✍ 풀이

첫번째 풀이 (오답)

"숫자 n을 받았을 경우 124나라의 법에 따라 3의 배수이면 몫-1을 숫자 앞에 쓰고 아닐 경우에는 그냥 을 써준다. 나머지가 0일 경우에는 124나라의 법에 따라 뒷자리에 4를 붙이고 그 이외의 숫자인 1과 2는 그대로 숫자 뒤에 붙여주면 된다." 라고 생각했는데 문제를 잘못읽었다. 124나라에서는 1,2,4만 써야한다.

두번째 풀이 (정답)

생각해보니 그냥 반복문 돌리면서 나머지를 문자열에 추가해주면 된다는 것을 깨달았다. 여기서 숫자를 나누어 줄 때 3의 배수로 나누어 떨어지는 경우가 있는데 이 경우에는 나머지가 0이므로 문자열에 0대신 4를 추가해준다. 또한 나머지로 떨어진 경우 다음에 오는 수의 나머지는 1을 빼준 형태로 문자열에 추가해주어야 하므로 조건문으로 통해 나머지가 0일 경우 1을 빼준뒤에 문자열에 추가해준다.

💻 코드

첫번째 풀이 (오답)

public class Solution {
    public static String solution(int n) {
        int quotient = n/3;
        int remainder = n%3;

        return String.valueOf(
        remainder==0 ? (quotient-1==0 ? "": (quotient)-1) : (quotient==0 ? "": quotient)) + 
        String.valueOf(remainder==0? 4:remainder);
    }
}

문제를 잘못 읽고 코드를 짧게 쓸 수 있을거 같아 객기를 부린 코드다. 문제를 잘못 읽고 풀어서 정확성과 효율성 모두 실패했다.

두번째 풀이 (정답)

    public static String solution(int n){
        StringBuilder sb = new StringBuilder();
        int remainder;
        
        while(n>0){
            remainder = n%3;
            n /= 3;
            
            // 3의 배수로 나누어 떨어질 경우 다음에 나눠주어야 하는 값의 나머지는 -1이므로 미리 1을 뺌
            if(remainder == 0) n--;

            sb.insert(0, remainder==0?4:remainder);
        }
        return sb.toString();
    }
profile
서버 개발자

0개의 댓글