본문 바로가기
알고리즘/프로그래머스

[programmers level2] 이상한 나라의 숫자_TDD

by 코리늬 2019. 3. 2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*public String solution(int n) {
    String answer="";
    int mok=n/3+1;
    int nmg=n%3;
    String num124="";
    ArrayList<String> list = new ArrayList<>();
    list.add("1");
    list.add("2");
    list.add("4");
    if(nmg==1){
        num124 = list.get(0);
    }else if(nmg==2){
        num124 = list.get(1);
    }else {
        mok -= 1;
        nmg=3;
        num124 = list.get(2);
    }
    for(int i=0; i<mok; i++){
        answer= answer+num124;
        System.out.println("answer : "+ answer);
    }
    return answer;
}
처음에는 위와 같이 작성해 public void 숫자123을_결과124로_표현()를 통과시켰는데
2번째 테스트부터 도저히 for문으로 못하겠어서 while문으로 바꿨는데 정답이 되어버림..
이렇게 하는게 아닌거같은데*/
public class CountryNumber {
    public String solution(int inputNumber) {
        String answer="";
        String countryNumber[] = {"4","1","2"};
        int nmg=0;
 
        while(inputNumber>0){
            nmg = inputNumber%3;
            inputNumber = inputNumber/3;
            if(nmg==0){
                inputNumber-=1;
            }
            answer=countryNumber[nmg]+answer;
 
        }
        return answer;
    }
}
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import org.junit.Test;
 
import static org.junit.Assert.assertEquals;
 
 
/*124 나라의 숫자
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
124 나라에는 자연수만 존재합니다.
124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법    124 나라    10진법    124 나라
1    1    6    14  11  44  16  122
2    2    7    21  12  111 17  124
3    4    8    22  13  112 18  141
4    11    9    24  14  114 19  142
5    12    10    41  15  121 20  144
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을
return 하도록 solution 함수를 완성해 주세요.
제한사항
n은 500,000,000이하의 자연수 입니다.
입출력 예
n    result
1    1
2    2
3    4
4    11
의사코드 작성
- 1,2,4 로만 이루어짐
반복주기가 3
자연수 입력 값이랑은 어떻게 연결시킬까 ?
3이니까 마지막 자리 수는 n을 나눈 나머지 값이 들어오고
1,2,4를 몫 만큼 돌려볼까?
이렇게 하면 몇바퀴를 돌릴지, 몇번째 자리의 값을 가져올지 나올 듯
*/
public class CountryNumberTest {
 
    @Test
    public void 숫자123을_결과124로_표현(){
        CountryNumber c = new CountryNumber();
        assertEquals("1",c.solution(1));
        assertEquals("2",c.solution(2));
        assertEquals("4",c.solution(3));
    }
 
    @Test
    public void 숫자456_두자리의_124로_표현(){
        CountryNumber c = new CountryNumber();
        assertEquals("11",c.solution(4));
        assertEquals("12",c.solution(5));
        assertEquals("14",c.solution(6));
    }
}
 
cs


조금씩 TDD를 적용해서 푸는 것에 재미를 느끼고 있다. 하지만 아직 TDD라고 부를 만한 정도는 아니다.

하지만 이렇게 해서 작성하니 경우의 수에 대해서 하나씩 생각하게 되고, 결론적으로 코딩하는 시간이 조금이나마 줄어드는 것 같다.

이 부분에 전념하고 싶지만, 회사 업무에도 소홀히 할 수 없으니 틈틈히 하는 걸로.

댓글