본문 바로가기
🥇Problem Solving (psS2mj)/BOJ

[BOJ] 1110. 더하기 사이클 (Java)

by psS2mj 2020. 5. 23.
반응형

문제 링크 / level: Bronze I

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

 

1110번: 더하기 사이클

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

www.acmicpc.net

 

 

내가 생각한 풀이

간단한 문제인데 자릿수 이야기가 있어서 문자열로 할까 숫자로 할까 고민하다가 브론즈 문제라서 그냥 간단하게 숫자로 풀었다. 자릿수는 나눗셈과 모듈러 연산으로 처리해줌.

 

몇 가지 포인트는,

1. 연산하려는 숫자가 한 자릿수일 때와 두 자릿수일 때로 나눠서 처리하는 것

2. 덧셈 연산 한 번 할 때마다 카운트(cnt)도 하나씩 증가시켜주는 것

3. 연산 결과를 활용해 새로운 수를 만들고 new_num에 업데이트 해주기

4. 새로운 수가 처음에 입력받았던 N과 같은 숫자인지 확인 (여기서 매번 N과 비교해줘야하니까 N은 그대로 가지고 있어야 한다.)

 

이 모든 과정이 몇 번 반복될지 모르니 전체는 while문으로 처리.

 

타닥..타닥.. (열심🤔🔥)

// 핵심 코드
while (true) {
	if (new_num < 10) {
		num1 = 0;
		num2 = new_num;
	} else {
		num1 = new_num / 10;
		num2 = new_num % 10;
	}
	result = num1 + num2;
	cnt++;
	// 새로운 수로 업데이트 해주기
	new_num = (num2 % 10) * 10 + (result % 10);
	// 원래의 수로 돌아왔는지 체크
	if (new_num == N) {
		break; // 끝내기.
	}
}

 

이렇게 간단한 문제인데도 나는 처음에 무한루프가 걸렸다.

 

정신을 놨는지 원래의 수로 돌아왔는지 체크하는 로직의 위치를 잘못 놨고, 그보다 더 심각한 문제는 new_num과 N을 비교해야하는데 result랑 비교하고 앉아있었다. 그래서 무한루프 걸렸는데 자존심 상하지만 그래도 디버깅으로 해결함.🤔 (뭐 어쨌든 해결했으니까....^_^)

 

디버깅의 도움으로 가볍게(?) 통과!!

 

아참, 웬만하면 BufferedReader를 쓰는데 이 문제는 입력값이 숫자 하나뿐이어서.. 그냥 귀찮아서 Scanner로 처리했다.😊

 

 

💌 전체 코드 보기:

https://github.com/psS2mj/Problem_Solving_BOJ_by_JAVA/blob/master/Bronze/Main_1110_%EB%8D%94%ED%95%98%EA%B8%B0%EC%82%AC%EC%9D%B4%ED%81%B4.java

 

psS2mj/Problem_Solving_BOJ_by_JAVA

BAEKJOON Online Judge (https://www.acmicpc.net) by JAVA - psS2mj/Problem_Solving_BOJ_by_JAVA

github.com

반응형

댓글