0. 출처
SWEA 1225번 문제입니다.
1. 문제
다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.
- 8개의 숫자를 입력 받는다.
- 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.
- 다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.
이와 같은 작업을 한 사이클이라 한다.
숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.
(1) 제약 사항
주어지는 각 수는 integer 범위를 넘지 않는다. 마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.
(2) 입력
총 10개의 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.
(3) 출력
#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
2. 문제 풀이
(1) 문제 풀이 방법
간단한 구현 문제입니다. 저는 Queue를 이용해서 풀었습니다.
Queue에서 데이터를 꺼낸 후 값을 차감한 뒤에 0보다 크다면 다시 큐의 제일 뒤에 삽입하는 동작을 반복합니다!
(2) 코드 (Java)
import java.util.*;
import java.io.*;
class Solution {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int test_case = 1; test_case <= 10; test_case++) {
int test = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
Queue<Integer> q= new LinkedList<>();
for(int i=0; i<8; i++) {
q.add(Integer.parseInt(st.nextToken()));
}
int number = 1;
while(true) {
if(number > 5) number = 1;
int n = q.poll();
n -= number;
if(n <= 0) {
n = 0;
q.add(n);
break;
}
q.add(n);
number++;
}
System.out.print("#" + test + " ");
while(!q.isEmpty()) {
System.out.print(q.poll() + " ");
}
System.out.println();
}
}
}
'Algorithm & Data Structure > 코딩 테스트 문제풀이' 카테고리의 다른 글
[백준] 9935번 문자열 폭발 (Java) (0) | 2024.04.27 |
---|---|
[백준] 11660번 구간 합 구하기 5 (Java) (0) | 2024.04.26 |
[백준] 26215번 눈 치우기 (Java) (0) | 2024.04.24 |
[백준] 11000번 강의실 배정 (Java) (0) | 2024.04.24 |
[백준] 14500번 테트로미노 (Java) (0) | 2024.04.24 |
댓글