자바 초급문제로 맨땅에 해딩하기

자바 Level 2 문제, 4-2. 124 나라의 숫자 진행 2일 차.

Jungsoomin :) 2020. 4. 29. 00:56

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12899)

자바 Level 2 문제의 124나라의 숫자 이다.

 

일단 나눗셈으로 시작했다. 1,2,3 이라는 수가 실수 짝수 홀수 다 확인을 가능케 해주는 수라고 생각하여 나눗셈을 통해서 List<Integer>의 구현객체인 ArrayList<Integer> 를 사용하여 각 수로 놓고 그 것을 다시 마지막 수만 제외하고 10으로 바꾸고 나서 합산시켰는데,

이 생각은 4+n 의 값이 10+n 이라는 생각에 사용한 방법이다. 이번에도 타이핑 하기 보다는 손공책에 적는 과정이 많았다.

 

제출 후 생각이 든 커다란 오점은 40이 되면 어떻게 할 것 인가? 였다. "400이되면 4000이 되면..?" 이것에 대한 정의가 필요하다는 것을 깨달았다.

지금 생각하기로는 3,3,3,3 = 12 인데 이걸 다시 진수로 바꾸면 4+4+4+4 가 되고 이걸 합산 하는 과정에서 4가 여러개 접하는 순간에 '10의 n승으로 규칙을 잡을 수 있을까 ...?' 하고서 구상을 해보다가 돌아갈 시간이 되어 마무리하고 돌아왔다.

 

마지막 로직은 StringBuilder 에 3이 발견되면 4로 바꾸어서 리턴시키는 로직이다. 최종 합산값만 고려한 StringBuilder 사용이기에 조금 더 짜보고 윤곽을 잡아보려고 한다.

 

생각보다 나누기가 많이 사용된다고 느끼고 연산과정을 줄여주는 것 같다고 느껴서, 일단 그 방향으로 로직을 짜보고 다른 것을 사용해봐야겠다고 생각이 드는 중이다. 

 

더 도전하고 부딪쳐봐야 하나라도 더 구체적으로 짜내려갈 수 있을 듯 하다. 

 

 

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
59
60
61
package programmers_124나라의숫자;
 
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
 
public class subClass {
    public String solution(int n) {
        String answer = "";
        int check = 0;
        //124 진법 , 자연수만 존재 모든 수를 1,2,4 로 표현
        List<Integer> list = new ArrayList<Integer>();
        int a =0
        int b = 0;
        //1,2,3 으로 나눌 수 있을지
        int sum =0;
        if(n>=3) {
            if(n%3 ==0) {for(int i=0; i<n/3;i++) {list.add(4);}
                
                
            }else if(n%3 != 0) {a = n/3; b = n%3;
            for(int i=0; i<a;i++) {list.add(4);}
            if(b%2 ==0) {for(int i=0; i<b/2;i++) {sum+=2;break;}}
            else if(b%1 ==0) {for(int i=0; i<b/1;i++) {sum += 1;;break;}}
            
            }
     }else {//   3보다 작다면
         if(n%2 ==0) {for(int i=0; i<n/2;i++) {list.add(2);break;}}
         else if(n%1 ==0) {for(int i =0; i<n/1;i++) {list.add(1);break;}}
         
     }
  
        for(int i=0; i<sum/4; i++) {
            list.add(4);
        }if(sum%4 != 0) {list.add(sum%4);}
        
        
        System.out.println(list.toString());// 여기까지 List에 1,2,4 진수 대입
 
        if(list.size()>1) {
    for(int i=0 ; i<list.size()-1;i++) {//<
        if(list.get(i).intValue() ==4) {list.set(i, 10);}// 10으로 바꾼다.// 마지막 수일떄<<<여기서 확인 봐야함
        check += list.get(i);
    }check += list.get(list.size()-1);
        }else {check += list.get(0);}
        
        
        answer = String.valueOf(check);
        StringBuilder sb = new StringBuilder(answer);
        
        for(int i=0; i<answer.length();i++) {
            char set = answer.charAt(i);
            if(set == '3') {sb.setCharAt(i, '4');}
        }
        
        System.out.println(answer);
        return answer;
        
    }
}
 
cs

 

됐다. 하며 미소를 지었으나,
예상한 대로 틀렸다 :)