먹었으면 뇌를 쓰자
백준 1110 java - 더하기 사이클 본문
문제
잘못된 코드
내가 생각한 풀이과정은 다음과 같다.
1) 입력 값이 10 미만일 경우 01, 02 형식으로 바꿔야 한다.
-> 구글링을 통해서 string.format() 메소드를 알아냈다.
앞에 0을 채워서 총 몇 자리로 나타낼지 정하면 된다.
이 문제는 2자리로 채워야하므로 "%02d"이다.
2) input 십의 자리 수+일의 자리 수 연산을 수행한 다음,
일의 자리 수+연산 결과 일의 자리 수를 "붙여야 한다."
-> input/10, input%10로 십의 자리 수와 일의 자리 수를 분리했다.
-> 그런데 입력 값이 10 미만인 변수 s는, 가령 01처럼 input/10을 하면 연산이 불가하다.
-> 그리고 수를 "붙여야 하는" 개념을 어떻게 구현할지 모르겠다.
3) "붙여진" 수가 원래의 input과 같아지면 반복문을 종료한다.
2)의 일부 정도까지만 짤 수 있었다...
10 미만인 변수 s의 십의 자리 수와 일의 자리 수를 또 쪼개야 하는데...
그러면... 복잡해지는... 머리가... 터진다...
멍청하면 머리가 아프다.
정답
사실 손으로 몇 개 써보면 굳이 10 미만의 수를 if문으로 따로 뺄 필요가 없다.
55 -> 5+5=10 새로운 수 50, 5+0=5 새로운 수 05
8 -> 08 -> 0+8=8 새로운 수 88, 8+8=16 새로운 수 86
6 -> 06 -> 0+6=6 새로운 수 66, 6+6=12 새로운 수 62
연산 공식 : (n/10) + (n%10)
원래 수의 오른쪽 자리 : n%10
합의 오른쪽 자리 : ((n/10)+(n%10))%10
새로운 수 공식 : (n%10)*10 + ((n/10)+(n%10))%10
구글링으로 다른 사람들의 코드 중 가장 이해하기 쉬운 걸 참고했다.
do-while 문으로 푸는 사람도 있었지만 문제 목적과는 다른 것 같아서 while문을 썼다.
1) 입력 값 input, 그리고 input과 같아질 마지막 새로운 수 reput을 변수로 선언한다.
2) 출력 값 cycle을 변수로 선언하고 초깃값 0을 담는다.
3) 위에서 적은 새로운 수 공식 (n%10)*10 + ((n/10)+(n%10))%10 으로 input 연산을 반복한다.
여기서 출력 값 cycle이 1씩 증가하는 것을 명시한다.
4) input과 reput이 같아지면 break
5) 반복문이 끝나고 난 뒤, 최종적으로 나온 출력 값 cycle을 출력한다.
여기서 bw.write()는 int를 출력하지 못하므로 String.valueOf() 메소드로 형변환한다.
이 문제, 복습할 때 알고리즘을 여러 번 연습해봐야겠다.
'JAVA > 백준 알고리즘' 카테고리의 다른 글
백준 10871 java - X보다 작은 수 (0) | 2022.11.22 |
---|---|
백준 10807 java - 개수 세기 (0) | 2022.11.21 |
백준 10951 java - A+B-4 (0) | 2022.11.16 |
백준 10952 java - A+B-5 (0) | 2022.11.14 |
백준 2494 java - 별 찍기 2 (0) | 2022.11.09 |