코딩 공부

[백준] 1110번 - 더하기 사이클 (Java)

ZZJJing 2020. 8. 26. 16:05

https://www.acmicpc.net/problem/1110

 

1110번: 더하기 사이클

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,

www.acmicpc.net

더하기 사이클 분류

시간제한 메모리 제한 제출 정답 맞은 사람 정답 비율

2 초 128 MB 83736 39794 33883 48.405%

문제

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 있어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

출력

첫째 줄에 N의 사이클 길이를 출력한다.

예제 입력  26 / 예제 출력  4 

예제 입력  55 / 예제 출력  3

예제 입력 1 / 예제 출력  60

 

출처

  • 문제를 번역한 사람: baekjoon
  • 어색한 표현을 찾은 사람: doju
  • 문제의 오타를 찾은 사람: eric00513
  • 데이터를 추가한 사람: jh05013

 

숫자를 String처럼 쪼개서 덧셈을 하는 거라서. 

계속 int -> String -> Array 넣고 또다시 int로 변환하고 

이 생각만 했더니 

머리에 쥐가 났고 

 

계속 형변환을 하는 게 여간 까다로운 게 아니었다 (ᵒ̌▱ᵒ̌)

 

빨리 푼 친구들이 스터디 시간이 남아서 공유가 돼버렸는데 (의도치 않게 힌트 들어버림.. ;;) 

어차피 ~99까지밖에 없기 때문에 형변환 할 필요 없이 나눈 몫과 나머지로 정리하면 된다고 했다..... ಠ_ಠ

 

다들 너무 똑똑해 ㅎㅎ.... 

 

일단 힌트는 들었고 

일단 do ~ while 문을 사용해야 할 것 같아서 (? 써보고 싶었는지도..)

(끝나고 친구들꺼 참고하니 그러지 않았어도 되었다.. ;ㅅ;) 

 

코딩하고 돌려보니 

 

26
c를 찍어봄 : 8
들어간 값 arr[0] : 6
Exception in thread "main" 들어간 값 arr [1] : 8
result 값: 68
c를 찍어봄 : 14
들어간 값 arr[0] : 6
들어간 값 arr[1] : 4
result 값: 6864
c를 찍어봄 : 10
들어간 값 arr[0] : 6
들어간 값 arr[1] : 0
result 값: 686460
c를 찍어봄 : 6
들어간 값 arr[0] : 6
들어간 값 arr[1] : 6
result 값: 68646066
c를 찍어봄 : 12
들어간 값 arr[0] : 6
들어간 값 arr[1] : 2

 

......????  막 이렇게 나와서 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 

막무가내로 이것저것 돌려봄 

1시간 반쯤 끙끙대다 완성본! 

 

 

 

b = arr[1]를 다시 넣어주는 걸 빼먹어서 한참 헤맸다. 

이렇게 막 해보는 스타일은 좋지 않은 것 같다.  문제는 풀었는데 어떻게 풀게 됐는지가 생각 안 난다..

 

차근차근하게 생각을 미리 해보고 코딩할 수 있도록 하자.... (,,Ծ‸Ծ,, ) 시무룩 

 

 

 


+ 친구들의 클린 코드 

심지어 친구들은 30분도 안 걸린 듯 

 

 

 

나는 막 더럽게 arr [0], arr [1]에 값을 막 넣었는데 

배열 없이 그냥 변수에 바로 m2 = (nm2 * 10) + (nm3 % 10);  값을 바로 넣어줬다. 

최고다. 

 

 


+ 2.5달뒤 다시 풀어봄 

어찌 저찌 그래도 완전 막연했던 지난번 보다는 풀긴 풀었는데 

몹시 더러운 코드가 되었따 ㅋㅋㅋㅋㅋㅋㅋㅋ

그래도 풀었으니깐 만족 ㅋㅋㅋㅋㅋㅋㅋㅋ  ꉂꉂ(ᵔᗜᵔ*)