본문 바로가기

건승하고있어요/알고리즘

[if] 더하기 사이클

반응형

문제: 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리  숫자와 앞에서 구한 합의 가장 오른쪽 자리 숫자를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6=8이다. 새로운 숫자는 68이다. 6+8=14이다. 새로운 숫자는 84이다. 8+4=12이다. 새로운 숫자는 12이다. 새로운 숫자는 4+2=6이다. 새로운 숫자는 26이다. 위의 예는 4번만에 원래 숫자로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

(출처: https://www.acmicpc.net/problem/1110)


-배열을 문자열로 변환하는 방법

배열.toString()

-char 배열을 문자열로 변환하는 방법

String.valueOf(char배열)

예)

char hi [] = {'a', 'b', 'c'};

String character = String.valueOf(hi);

System.out.println(character);

->결과: abc


ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

막 푼 문제

뭔가 줄이거나 어떻게 볶아볼 생각 안 하고 아 그냥 귀찮은대로 변수 막 선언해서 풀었다.

남들 코드길이 400나올때 나는 1700나옴ㅋㅋㅋㅋㅋㅋㅋ

아몰랑 맞음 그만..

ㅠㅠ

졸려서 머리를 못 쓰겠다. 나도 일찍 자고 새벽에 일어나서 차마시고 싶은데 

차마시다 새벽 4시에 자는거 그만하고 싶다ㅠㅠ

진짜 직관적으로 풀었다 있는 그대로 보이는 그대로 하라는 그대로 사실 창피하다.

ㅋㅋㅋㅋㅋ

어쨌거나 if 끝 함수는 건너뛰어야지 스프링을 어서 해야할텐데



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
74
75
76
import java.util.Scanner;
 
public class AddCycle {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        int N = scan.nextInt(); //첫 숫자 받기
        int M = N;
        int cnt = 0//while문 몇 번 도는지 확인하기
        int N2 = 0//while문을 돈 숫자
        int a = 0;
        int b = 0;
        int c = 0;
        String snum; //char로 바꾸기 위한 string 변환
        String snum2;
        char num [] = new char[4];
        boolean YN = true;
        
        while(YN) {
            if(N>=0 && N<10) {
                //1자리 수 들어왔을 때
                snum = Integer.toString(N);
                num[0= '0';
                num[1= snum.charAt(0);
                a = 0;
                b = snum.charAt(0)-'0';
                c = a + b;
                String C = String.valueOf(c);
                if(c>=0 && c<10) {
                    num[2= '0';
                    num[3= C.charAt(0);
                } 
                char num2 [] = {num[1], num[3]};
                snum2 = String.valueOf(num2);
                N2 = Integer.parseInt(snum2);
                cnt++;
                if(N2 != M) {
                    N = N2;
                } else {
                    YN = false;
                }
            } else if(N>=10 && N<100) {
                //2자리 수 들어왔을 때
                snum = Integer.toString(N); //한 자리씩 배열에 넣어주기 위한 String 형변환
                num[0= snum.charAt(0);
                num[1= snum.charAt(1);
                a = snum.charAt(0)-'0';
                b = snum.charAt(1)-'0';
                c = a + b;
                String C = String.valueOf(c);
                if(c>=0 && c<10) {
                    num[2= '0';
                    num[3= C.charAt(0);
                } else {
                    num[2= C.charAt(0);
                    num[3= C.charAt(1);
                            
                }
                char num2 [] = {num[1], num[3]};
                snum2 = String.valueOf(num2);
                N2 = Integer.parseInt(snum2);
                cnt++;
                if(N2 != M) {
                    N = N2;
                } else {
                    YN = false;
                }
            }
            
            
        }
        System.out.println(cnt);
        scan.close();
    }
}
 
cs




반응형

'건승하고있어요 > 알고리즘' 카테고리의 다른 글

[1차배열] 음계  (0) 2018.02.15
[1차배열] OX 퀴즈  (0) 2018.02.13
[if] 평균은 넘겠지 / printf() 메소드 정리  (2) 2018.02.11
[for] 2007년 달력문제  (0) 2018.02.08
[소수] 소수찾기  (5) 2018.02.07