👀 문제 설명
로그인해야 문제를 볼 수 있다.
✍🏻풀이
큐를 사용해서 풀었다.
큐에 수를 차례대로 넣고, cnt값을 사용해 암호를 생성한다.
cnt의 초기값을 1로 두고, 암호를 생성할 때마다 cnt + 1을 해준다. 만약, cnt가 6보다 크거나 같으면 cnt를 1로 바꾼다. (cnt는 1~5만 가능)
그리고, cnt를 사용해 queue.poll() - cnt가 0보다 크거나 같을 동안 queue.poll() - cnt한 값을 다시 queue에 넣어준다. (맨 뒤로 보내기)
위 과정은 queue.poll() - cnt가 0보다 작거나 같을 때 끝난다.
코드
package swea;
// 암호생성기 (https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD&categoryId=AV14uWl6AF0CFAYD&categoryType=CODE&problemTitle=%EC%95%94%ED%98%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 )
import java.util.*;
import java.io.*;
public class SWEA_1225 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
Queue<Integer> queue = new LinkedList<>();
for (int tc = 1; tc <= 10; tc++) {
// input
br.readLine();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 8; i++) {
queue.add(Integer.parseInt(st.nextToken()));
}
// solve
int cnt = 1;
while (true) {
int minusNum = queue.poll() - cnt;
if (minusNum <= 0) {
queue.add(0);
break;
}
queue.add(minusNum);
cnt++;
if (cnt > 5)
cnt = 1;
}
bw.write("#" + tc + " ");
while (!queue.isEmpty()) {
bw.write(queue.poll() + " ");
}
bw.newLine();
}
bw.flush();
bw.close();
}
}
'숨막히는 알고말고 > 문제 풀이' 카테고리의 다른 글
[SWEA] 쇠막대기 자르기 (0) | 2021.08.05 |
---|---|
[Baekjoon] 탑 (2) | 2021.08.05 |
[SWEA] 괄호 짝짓기 (0) | 2021.08.05 |
[SWEA] 파리 퇴치 (0) | 2021.08.04 |
[SWEA] 농작물 수확하기 (0) | 2021.08.04 |