✔ 암호문1
문제 분석하기
LinkedList를 사용하여 삽입을 하도록 함
손으로 풀어보기
- 원본 암호문의 길이만큼 LinkedList에 암호문 저장
- 명령어의 개수 만큼 LinkedList에 x 인덱스부터 하나씩 증가시키며 숫자 삽입
- 명령어 중 10개의 결과만 출력 반환
슈도코드 작성하기
T(테스트 케이스 수) = 10
for(T만큼) {
list(암호문을 저장할 LinkedList)
N(원본 암호문의 길이)
for(i -> N만큼) {
list에 암호 숫자 저장
}
M(명령어의 갯수)
for(i -> M만큼) {
command(명령어 저장)
x(삽입 시작 위치 저장)
y(삽입 숫자 갯수 저장)
if(command와 I가 같다면) {
암호문 삽입 함수(x, y)
}
}
결과 출력 함수(test_case)
}
암호문 삽입 함수 {
for(i -> y만큼) {
list.add(x, 삽입할 암호 숫자)
x++
}
}
결과 출력 함수 {
StringBuilder sb = new StringBuilder
for(i -> 10만큼) {
sb.append(암호 숫자 + 공백)
}
#T와 sb 출력
}
코드 구현하기
/**
* 1228) 암호문1
*/
public class D001_1228 {
static LinkedList<Integer> list;
static Scanner sc;
public static void main(String args[]) throws Exception {
sc = new Scanner(System.in);
// T(테스트 케이스 수) = 10
int T = 10;
// T만큼
for (int test_case = 1; test_case <= T; test_case++) {
// list(암호문을 저장할 LinkedList)
list = new LinkedList<>();
// N(원본 암호문의 길이)
int N = sc.nextInt();
// list에 암호 숫자 저장
for (int i = 0; i < N; i++) {
list.add(sc.nextInt());
}
// M(명령어의 갯수)
int M = sc.nextInt();
for (int i = 0; i < M; i++) {
// command(명령어 저장)
String command = sc.next();
// x(삽입 시작 위치 저장)
int x = sc.nextInt();
// y(삽입 숫자 갯수 저장)
int y = sc.nextInt();
// command와 I가 같다면
if (command.equals("I")) {
// 암호문 삽입 함수(x, y)
insertPW(x, y);
}
}
// 결과 출력 함수(test_case)
print(test_case);
}
}
// 암호문 삽입 함수
private static void insertPW(int x, int y) {
for (int i = 0; i < y; i++) {
// list.add(x, 삽입할 암호 숫자)
list.add(x, sc.nextInt());
x++;
}
}
// 결과 출력 함수
private static void print(int t) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
// sb.append(암호 숫자 + 공백)
sb.append(list.get(i) + " ");
}
// #T와 sb 출력
System.out.println("#" + t + " " + sb);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[1230] 암호문3 (0) | 2023.11.21 |
---|---|
[1229] 암호문2 (0) | 2023.11.21 |
[1227] 미로2 (0) | 2023.11.20 |
[1226] 미로1 (0) | 2023.11.20 |
[1225] 암호생성기 (0) | 2023.11.20 |