백준 1110번 문제를 풀어보았다. 간단한 문제였지만 약간의 사고 방식을 요구하는 문제였다.
문제의 조건대로 처음에 받은 숫자가 10보다 작은 경우 앞에 0을 붙여 두자리 수로 만들어 주고
사이클에 맞게 새로운 수를 생성해 준 후 원래 수와 같다면 탈출하는 방식으로 접근했다.
이때 정수를 문자열로 변경해주고 문자열을 정수로 변경해주는 작업을 병행했다.
// 정수 -> 문자열
int num;
String str;
str = String.valueOf(num);
// 문자열 -> 정수
String str;
int num;
num = Integer.parseInt(str);
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str,temp;
str = br.readLine();
int A,B;
if (Integer.parseInt(str)<10)
{
temp = ( "0" + str) ;
}
else
temp = str;
String[] st = temp.split("");
A = Integer.parseInt(st[0]);
B = Integer.parseInt(st[1]);
int count=0;
while(true)
{
int C;
if (A+B >=10)
{
C = A+B;
C = C %10;
count++;
}
else
{
C = A+B;
count++;
}
if(Integer.parseInt(str)==Integer.parseInt(String.valueOf(B) + String.valueOf(C)))
{
break;
}
A = B;
B = C;
}
System.out.println(count);
br.close();
}
}
생각보다 복잡하게 풀었다.
굳이 이렇게 풀어야 하나 싶어서 다른 풀이를 찾아보았다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
str = br.readLine();
int n,A,B,temp;
n = Integer.parseInt(str);
temp = n;
int count=0;
while(true)
{
A = temp / 10;
B = temp % 10;
temp = B * 10 + (A+B) % 10;
count++;
if (n == temp) break;
}
System.out.println(count);
br.close();
}
}
단순 문자열을 복잡하게 바꾸고 따로 처리해줄 필요 없이
나누기, 나머지를 이용하여 새로운 수를 만들어주는 로직을 찾기만 하면 쉽게 해결할 수 있었다.
메모리와 시간은 그렇게 차이나진 않았지만, 전보단 줄긴 했고 코드가 짧아져서 가독성이 좋아졌다.
너무 복잡하게 생각하지 말고, 간단하게 생각하는 습관을 길러야겠다.
'Algorithm > 백준' 카테고리의 다른 글
백준 바이러스 2606 파이썬 (0) | 2023.08.26 |
---|---|
백준 10809번 - 알파벳 찾기 [JAVA] (0) | 2022.01.16 |