[SWEA] #1225 - 암호생성기
2022. 3. 11. 23:32
728x90
반응형
💡 출처
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD
💡 문제
[설명]
다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.
1. 8개의 숫자를 입력받는다.
2. 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.
3. 다음 첫 번째 수는 2 감소한 뒤 맨 뒤로 보낸다.
4. 그다음 첫 번째 수는 3을 감소하고 맨 뒤로 보낸다.
5. 그다음 수는 4를 감소하고 맨 뒤로 보낸다.
6. 그다음 수는 5를 감소하고 맨 뒤로 보낸다.
이와 같은 작업을 한 사이클이라 한다.
숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이때의 8자리의 숫자 값이 암호가 된다.
💡 아이디어
Queue를 이용하면 간단하게 문제를 해결할 수 있다.
일단 1을 가지는 변수를 선언한다.
그 후 Queue에서 poll을 한 뒤에 값에서 변수를 빼주고, 다시 Queue에 넣는다.
동시에 1을 가지던 변수는 +1을 해준다.
이 과정을 반복하다가 1을 가지는 변수가 6이 되면 한 사이클이 끝난 것이기 때문에 다시 1로 바꿔주고 과정을 반복한다.
이 과정을 진행하다가 Queue가 0을 가지면 반복을 종료하면 된다.
💡 소스코드
package SWEA;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class SWEA_P1225_암호생성기 {
public static void main(String[] args) throws Exception {
System.setIn(new FileInputStream("./SWEA_INPUT/SWEA_P1225_input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Queue<Integer> queue = new LinkedList<>();
for (int TC = 1; TC <= 10; TC++) {
int T = Integer.parseInt(br.readLine());
String[] str = br.readLine().split(" ");
for (int i = 0; i < 8; i++)
queue.add(Integer.parseInt(str[i]));
int cnt = 1;
while (!queue.contains(0)) {//queue에 0이 포함될 때까지
if (cnt == 6)//cnt가 6이면 다시 1로 감소
cnt = 1;
if (queue.peek() - cnt < 0) {//queue의 값에서 cnt를 뺐을 때 음수면 0으로 add
queue.poll();
queue.add(0);
} else
queue.add(queue.poll() - cnt++);//음수가 아니면 cnt를 빼고 add
}
System.out.print("#" + TC + " ");//출력
while (!queue.isEmpty())
System.out.print(queue.poll() + " ");
System.out.println("");
queue.clear();
}
br.close();
}
}
💡 결과
728x90
반응형
'Algorithm > SW Expert Academy' 카테고리의 다른 글
[SWEA] #1231 - 중위순회 (0) | 2022.03.15 |
---|---|
[SWEA] #1226 - 미로1 (0) | 2022.03.15 |
[SWEA] #1221 - GNS (0) | 2022.03.11 |
[SWEA] #1224 - 계산기3 (0) | 2022.03.09 |
[SWEA] #1220 - Magnetic (0) | 2022.03.09 |