ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘 문제] 백준 알고리즘 : 감소하는 수
    IT/알고리즘 2019. 9. 15. 23:21

    친구들과 함께 새롭게 시작한 1일 1커밋 프로젝트!!!!

    덕분에 오랜만에 알고리즘 문제를 풀어보았다. 

    생각보다 머리가 너무 안돌아가서 당황했다 ㅠㅜ 열심히좀 해야할듯


    복귀기념 문제는 간단한 걸로 준비해봤땅 ^*^




    n번째 감소하는 수가 뭔말인가 한참을 고민했는데 말그대로


    1은 1번째 2는 2번째 --- 쭉해서 18번째의 감소하는 수는 무엇인가 출력하는 것이다.

    ex) 12번째 -> 1,2,3,4,5,6,7,8,9,10,20,21 해서 출력되는 수는 21이 된다



    소스코드 ↓


    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    public class lowNumber {
     
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            
            int x = 0;  //감소하는 수
            int count = 0;  //n번쨰 감소하는 수
            
            Scanner scan = new Scanner(System.in);
            
            int n = scan.nextInt();   //n번째 입력
            
            int[] array = new int[100];  //감소하는 수인지 비교하기 위한 배열
            
            while(true) {
                
                if(n == 0) {    //0번째 감소하는 수는 0이다
                    break;
                }
                
                x++;    //숫자 증가
                
                if((x < 10|| (x%10 == 0 && x/10 < 10)) {    //1~9는 모두 감소하는 수이고, 
                    //System.out.println(x);                  10,20,30 10단위도 모두 감소하는 수
                    count++;
                }else {            
                    int temp = x;
                    int i=0;
                    int count2 = 0;
                    while(true) {
                        array[i] = temp%10;    //숫자 각 자리수를 비교하기위해 각 자리를 배열에 넣는다
                        temp = temp/10;
                        
                        if(temp < 10) {
                            i++;
                            array[i] = temp;
                            count2++;
                            break;
                        }
                        count2++;
                        i++;
                    }
                    
                    String test = "감소";
                    
                    //각 자리를 비교하여 감소하는 수 인지 확인
                    for(int j=0; j<count2; j++) {
                        if(array[j] < array[j+1]) {
                            continue;
                        }else {
                            test = "증가";
                            break;
                        }
                    }
                    
                    if(test.equals("감소")) {
                        //System.out.println(x);
                        count++;
                    }
                    
                }
                
                //해당 숫자가 n번째 감소하는 수이면 반복문 종료
                if(count == n) {
                    break;
                }            
            }
            
            System.out.println(x);
        }
     
    }
    cs



    실행결과 




    자바하는법을 살짝 까먹은거 같지만 1일1커밋 하면서 다시 되살려봐야겠다 ㅎㅎ..

    오랜만에 해도 부담없이 풀 수 있는 문제였다!

    댓글

Designed by Tistory.