문제: 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 |