반응형
[ 문제 ]
다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.
- 8개의 숫자를 입력 받는다.
- 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.
다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.
이와 같은 작업을 한 사이클이라 한다.
- 숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.
[제약 사항]
주어지는 각 수는 integer 범위를 넘지 않는다.
마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.
[입력]
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.
ex. 9550 9556 9550 9553 9558 9551 9551 9551
[출력]
ex. 6 2 2 9 4 1 3 0
[Java Code]
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 암호생성기 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
Queue<Integer> code = new LinkedList<>();
int cnt =0;
boolean find = false;
for ( int tc = 1; tc <=10 ; tc++) {
sc.nextInt(); // case number
find = false;
// 저장
for ( int i=0; i< 8; i++) {
code.offer(sc.nextInt());
}
//System.out.println(code.toString());
//System.out.println(code.poll());
while ( true) {
// 1cycle : 5개 만큼 뒤로 보내기
cnt =1;
while ( cnt != 6) {
int first = code.poll(); // 앞에있는거 꺼내서
first -= cnt ; // cnt 감소 후
if ( first <= 0 ) {
first =0;
code.offer(first);
//System.out.println(code.toString());
find = true;
break;
}
else code.offer(first); // 다시 뒤에다가 넣기
cnt ++;
}
if ( find) break;
}
System.out.print("#" +tc+" ");
for( int i=0; i<8; i++) {
System.out.print(code.poll()+" ");
}
System.out.println();
code.clear();
}
}
}
Queue<Integer> code = new LinkedList<>();
- 큐의 offer , poll 메소드를 응용한 문제
반응형
'알고리즘' 카테고리의 다른 글
[삼성 SW Expert Academy] 7699. 수지의 수지맞는 여행 (JAVA) (0) | 2020.08.24 |
---|---|
[백준] 스티커 붙이기 18808 [ Java ] (0) | 2020.08.23 |
[백준] 백준 말이 되고픈 원숭이 1600[Java] (0) | 2020.08.22 |
[삼성 SW Expert Academy] 3289. 서로소 집합 (0) | 2020.08.04 |
[삼성 SW Expert Academy] 1247. 최적 경로 (0) | 2020.08.02 |