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라고 부를 만한 정도는 아니다.
하지만 이렇게 해서 작성하니 경우의 수에 대해서 하나씩 생각하게 되고, 결론적으로 코딩하는 시간이 조금이나마 줄어드는 것 같다.
이 부분에 전념하고 싶지만, 회사 업무에도 소홀히 할 수 없으니 틈틈히 하는 걸로.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 포켓몬 (level 2) java (0) | 2019.03.26 |
---|---|
[프로그래머스] 기능 개발 (level.2) java (0) | 2019.03.25 |
[programmers level2] 다음 가장 큰 수 (java) -TDD를 사용한 풀이 (0) | 2019.02.10 |
[프로그래머스] 이상한 문자 만들기(level 1) (0) | 2018.12.17 |
[백준+프로그래머스] 1978번 소수 찾기 + 프로그래머스 소수 찾기 (0) | 2018.12.10 |
댓글