mingg IT

[JAVA] 프로그래머스 1 2 4 나라의 숫자 본문

코딩테스트

[JAVA] 프로그래머스 1 2 4 나라의 숫자

mingg123 2021. 4. 6. 19:54

프로그래머스 1 2 4 나라의 숫자

 

programmers.co.kr/learn/courses/30/lessons/12899

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

초기 코드 (실패)

class Solution {
    static String sol(int s, int r) {
        if(s == 0)
        return Integer.toString(r);
        else {
            int share = s / 3;
            int remainder = s % 3; 
                if(remainder == 0)  {
                share = share -1;
                remainder = 4;
            }
            String toOriReminder = Integer.toString(r);
            String toReminder = Integer.toString(remainder);
            int re = Integer.parseInt(toReminder + toOriReminder);
            System.out.println(re);
            return sol(share, re);
        }
        // if(s==0) return Integer.toString(r);
    }
    public String solution(int n) {
        String answer = "";
        int share = n / 3;
        int remainder = n % 3;
        if(remainder == 0)  {
            share = share -1;
            remainder = 4;
        }
        
        return sol(share, remainder);
    }
}

런타임 에러가 발생했다. 내 안 좋은 습관중 하나가 재귀를 자꾸 함수로 짜려고 하는 습관이 있다. 

 

 

 

두 번째 코드 (효율성 실패)

class Solution {
    public String solution(int n) {
        String answer = "";
      
        while(n > 0) {
            int remainder = n % 3;
            n = n / 3;
            if(remainder == 0)  {
                n = n -1;
                remainder = 4;
            }
            
            answer = remainder + answer;
        }
     
        return answer;
    }
}

 

 

추가로 알게 된건 int + string = string으로 만들어 낸다.

if문안에서 오래걸린건가... 

 

 

세 번째 코드 (성공)

class Solution {
  public String solution(int n) {
      String[] numbers = {"4", "1", "2"};
      String answer = "";
      
    while(n > 0) {
        int r =  n % 3;
        n = n/3;
        if(r==0) n = n-1;
        answer = numbers[r] + answer;
    }
      
      return answer;
  }
}

 

배열로 만들어서 나머지가 0일경우 4, 1일경우 1, 2일경우 2를 바로 읽어오도록 했더니 성공함.

 

앞으로 런타임에러 걸리지 않게 함수로 구현하지 않고 저런식으로 하는 습관을 들여야겠다. 

Comments