baekjoon1110. 더하기 사이클
오늘은 좀 쉬운 문제를 풀어보았습니다. 백준의 '단계별로 문제풀기' 라는 코너에 특정 영역에 딱 하나 1를 풀지 않아 '완료' 표시되지 않은 것이 눈에 좀 걸려서요.
이와 같은 문제를 풀다보면 String으로 문제를 푸는 것이 좋을까, Int로 문제를 푸는 것이 더 좋을까 생각하곤 하는데요. 저 같은 경우 이번 문제에서 String으로 풀었습니다. 그런데 다 풀고나니 이 문제는 Int로 해도 괜찮겠더라구요. 그 이유는 다음과 같습니다.
여기에서 속도는 큰 문제되지 않았지만 int를 String으로 바꾸고 하는 과정에서 성능에서 불리한 점이 분명 있습니다.
새로운 숫자를 만드는 방식이 기존 수의 가장 오른쪽 수와 각 자리의 수를 더한 수의 가장 오른쪽 수 합치는 것이었습니다. 근데 생각해보면 새로운 숫자는 100자리를 넘을 수 없습니다.
- 오른쪽 자리 중 가장 크다고 생각하는 9를 2개 합쳐도 99이 최대인 것이죠.
- 이런 점을 고려하면 각 자리 수의 합 구할 때
(기존 수 / 10) + (기존 수 % 10)
로 가능하고 새로운 수를 만들 때도 %을 이용하면 쉽게 구할 수 있습니다. 이는 다 2자리 수라는 것이기 때문에 간단하게 계산할 수도 있는 것입니다.
물론 저는 저렇게 간단하게 풀진 못하였지만 다만 2자리 수를 넘어갈 때도 유연하게 대처할 수 있다는 점에서 장점은 있다고 생각합니다.
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String n = formatting(br.readLine());
String newNum = n;
int answer = 0;
while (true) {
int temp = 0;
for (int i = 0; i < newNum.length(); i++) {
temp += newNum.charAt(i) - '0';
}
StringBuilder sb = new StringBuilder();
newNum = sb.append(getLast(newNum)).append(getLast(String.valueOf(temp))).toString();
answer++;
if (n.equals(newNum)) break;
}
System.out.println(answer);
}
private static String formatting(String readLine) {
int num = Integer.parseInt(readLine);
if (num < 10) return "0" + readLine;
return readLine;
}
private static Character getLast(String text) {
return text.charAt(text.length() - 1);
}
}
'Algorithm > problem solving' 카테고리의 다른 글
leetcode 2102. Sequentially Ordinal Rank Tracker (0) | 2023.03.19 |
---|---|
Today's Algorithm(2020-11-23) (1) | 2020.11.23 |
Today's Algorithm(2019-03-18) (0) | 2019.03.18 |
Today's Algorithm(2019-03-17) (0) | 2019.03.17 |
Today's Algorithm(2019-03-15) (0) | 2019.03.15 |