https://www.acmicpc.net/problem/1110
1의 자리, 10의 자리를 어떻게 구하는데?
나에겐 익숙하지 않은 문제라 빛과 소금인 st님의 티스토리를 또 참고했다
>>출처는 여기<<
입력은 BufferedReader로 입력받는다. 그게 빠르니까
int n을 입력받는 변수로 지정한다.
n의 1의 자릿수는 새로운 수의 10의 자릿수이다.
10의 자릿수 + 1의 자릿수를 더한 값의 1의 자릿수는 새로온 수의 1의 자리로 간다
만약 n이 한자리라면 앞에 0을 붙인다.
난 여기서 String으로 진짜 앞에 "0"을 붙였다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
뭔가 크게 잘못되었음을 직감했다
이런 로직으로 돌아간다.... 맥북에 그림판이 없어서 page로 만들어봐따...
10으로 나눈 나머지 값에 10을 곱하면 새로운 수의 십의 자릿수가 된다
// int n이 14일때
n = (n%10)*10 // new의 10의 자릿수
각 자릿수의 합은 먼저 n의 십의 자릿수는 나누기 10을하면 n이 한자릿수면 0, 그 외에는 십의 자릿수가 그대로 반환된다.
그리고 n의 일의 자릿수는 나머지인 %를 쓰면 된다
n = ((n/10)+(n%10))%10 // n의 일의 자릿수
위 두개의 값을 더한 것이 새로운 수가 된다.
괄호가 캐스팅보다 우선순위이다.
연산 순서나 알고리즘에 있어 순서도가 중요한 경우 괄호를 쳐주는 것이
명시적으로 우선순위를 두는 것이기 때문에 어지간하면 괄호를 쳐주는 것이 좋다
n=((n%10)*10)+(((n/10)+(n%10))%10)
이를 반복하기 위해 while문을 사용하고 반복문에서 n값을 새로운 값으로 대체해 주기 때문에
변수는 그대로 n으로 한다.
추가로 입력해야할 변수에는
1. 처음 입력값을 복사한 변수 copy
2. 반복문이 몇 번 반복되었는지 세어주는 변수 count
3. 처음 입력값과 새로운 변수가 같은 경우 반복문을 종료하기 위한 조건문
주의점은 최소 1번은 반복문을 돌아야하기 때문에 do-while문을 사용한다.
do-while문
조건에 따라 반복을 계속할지 결정할때 사용하는 것은 while문과 동일 하지만
무조건 중괄호 {} 블럭을 한번 실행하고 조건을 검사하여 반복을 결정한다
do{
(1) 실행문; // 최초실행. 반복 영역
}while ((2) 조건식)); // 조건식이 true일 경우 실행문으로 돌아가고 false일 경우 do-while문을 종료한다
for문을 사용하는 경우
1. 반복 횟수가 정해진 경우
2. 배열과 함께 주로 많이 사용
while문을 사용하는 경우
1. 무한 루프나 특정 조건에 만족할 때까지 반복해야 하는 경우
2. 주로 파일을 읽고 쓰기에 많이 사용
++ 정답코드
package 백준;// @ author ninaaano
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class b_1110 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int copy = n; // 처음 입력값을 복사한 변수
int count = 0; // 반복문이 몇번 반복되었는지 세어주는 변수
do { // while문이 최소 1번은 반복문을 돌아야하기 때문에 do-while문 사용
n = ((n % 10) * 10) + (((n / 10) + (n % 10)) % 10);
count++;
}while(copy!=n);
System.out.println(count);
}
}
100의 자리 구하기, 10의 자리 구하기, 1의 자리 구하기는
알고리즘 문제에서 종종 출제된다.
이런 형식의 문제를 잘 기억했다가 나중에 비슷한 류의 문제가 나왔을 때 적용하면 좋을 것 같당!