백준 4단계(1 ~ 3번 문제)
"두 정수 A와 B를 입력받은 다음, 합을 출력하는 프로그램을 작성하시오. 입력의 마지막에는 0 두 개가 들어온다" 라는 문제.
문제 해결을 위해 while문으로 반복을 시켜주었고, if문으로 두 정수가 0일 경우 break를 걸어주었다.
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int x = sc.nextInt();
int y = sc.nextInt();
if (x == 0 && y == 0) {
break;
}
System.out.println(x + y);
}
}
}
2번 문제의 경우 앞선 문제에서 if문 처리해준 부분만 지우고 정답 제출했더니 바로 통과.
3번 문제의 경우 해결하는데 시간초과 걸려서 해결하는데 시간이 좀 걸린 문제였다.
문제는 "0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다.
먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다.
그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다.
8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다." 라는 문제였다.
입력받을 정수형 변수랑 자리 수를 더해서 저장해 둘 변수를 선언하고, 사이클 증가시킬 변수를 0으로 초기화하여 선언.
while문 내에서 number가 2자리 수 이므로 10으로 나눈 나머지랑 몫이랑 연산자로 잘 조합해서,
res에 저장하고 이것을 number랑 비교하니 시간 초과...
시간 초과를 해결해 주기 위해 처음 res 초기화 시 number의 값이 res에 들어가도록 선언했으니,
while문 내에서 number에 자리수 더하는 연산을 저장하고 마지막에 한 번만 비교해주면 되려나 해봤더니 되서 통과한 문제.
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System. in);
int number = sc.nextInt();
int cycle = 0;
int res = number;
while (true) {
number = ((number % 10) * 10 + ((number / 10) + (number % 10)) % 10);
cycle ++;
if (res == number) {
break;
}
}
System.out.println(cycle);
}
}
'Algorithm' 카테고리의 다른 글
2021.07.31 (0) | 2021.07.31 |
---|---|
2021.07.29 (0) | 2021.07.29 |
2021.07.21 (0) | 2021.07.21 |
2021.07.20 (0) | 2021.07.20 |
2021.07.19 (0) | 2021.07.19 |