🅰 1225. 암호생성기
✏️ 문제 풀이
8개의 숫자를 입력 받는다.
첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다. 다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고
맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다. 이와 같은 작업을 한 사이클이라 한다.
숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.
큐를 이용하여 8개의 숫자를 입력받은 뒤 while문을 통해 반복을 해주었고
그 안에 for문을 넣어 감소한 숫자를 반복해주었다.
q.poll()-i 가 0보다 작거나 같으면 암호문이 종료되는 조건이므로
큐에 삽입 후 while문을 빠져나오도록 설정해주었다.
✏️ 소스코드
package queue;
import java.util.*;
public class Solution_D3_Sw1225_손은성 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Queue<Integer> q = new LinkedList<>();
// test_case 10번 반복
for (int test_case = 1; test_case <= 10; test_case++) {
int T = sc.nextInt();
// 8개의 데이터 queue에 입력
for (int i = 0; i < 8; i++) {
int input = sc.nextInt();
q.offer(input);
}
// 연산 수행
Loop1: while (true) {
for (int i = 1; i <= 5; i++) {
int n = q.poll() - i;
if (n <= 0) {
q.offer(0);
break Loop1;
} else {
q.offer(n);
}
}
// 결과 출력
}System.out.printf("#%d ", test_case);
while (!q.isEmpty()) {
System.out.print(q.poll() + " ");
}
System.out.println();
}
}
}
✅ 후기
배열을 이용하면 복잡했겠지만, 큐를 이용해서 풀면 쉽게 풀리는 문제
🅰 1226. 미로 1
✏️ 문제 풀이
- 아래 그림과 같은 미로가 있다. 16*16 행렬의 형태로 만들어진 미로에서 흰색 바탕은 길, 노란색 바탕은 벽을 나타낸다.
가장 좌상단에 있는 칸을 (0, 0)의 기준으로 하여, 가로방향을 x 방향, 세로방향을 y 방향이라고 할 때, 미로의 시작점은 (1, 1) 이고 도착점은 (13, 13)이다.
- 주어진 미로의 출발점으로부터 도착지점까지 갈 수 있는 길이 있는지 판단하는 프로그램을 작성하라.
- direction 배열을 선언하여 위,아래,좌,우 방향에 길이 있는지 파악하도록 하였다.
- 미로 배열을 저장하며 시작점의 x좌표와 y좌표를 큐에 넣어주었다.
-반복문을 사용하여 큐가 비어있을때까지 돌도록 while문 조건을 걸어주었고, 큐에서 x,y좌표를 꺼내
시작점을 기준으로 위, 아래,좌,우 탐방을 한 뒤 길이 있으면 그 길의 x,y좌표를 큐에 저장하였다.
- 왔던 길은 다시 돌아가지 않도록 1로 초기화 시켜주었다.
- while문이 다 도는동안 도착점인 3을 만나게 되면 길이 존재함을 알고 종료하였고,
다 도는동안 도착점을 못만나면 미로는 길이 없음으로 출력하였다.
✏️ 소스코드
package queue;
import java.io.*;
import java.util.*;
public class Solution_D4_Sw1226_손은성 {
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 T = Integer.parseInt(br.readLine());
Queue<Integer> q = new LinkedList<>();
int maze[][] = new int[16][16];
int col[] = { -1, 1, 0, 0 };
int row[] = { 0, 0, -1, 1 };
int result = 0;
// 사다리 데이터 입력
for (int i = 0, end = maze.length; i < end; i++) {
String str = br.readLine();
for (int j = 0, end2 = maze.length; j < end2; j++) {
maze[i][j] = str.charAt(j) - '0';
if (maze[i][j] == 2) {
q.offer(i);
q.offer(j);
}
}
}
Loop1: while (!q.isEmpty()) {
int r = q.poll();
int c = q.poll();
for (int i = 0; i < 4; i++) {
int nr = r + col[i];
int nc = c + row[i];
if (maze[nr][nc] == 0) {
q.offer(nr);
q.offer(nc);
maze[nr][nc] = 1;
}
if (maze[nr][nc] == 3) {
result = 1;
break Loop1;
}
}
}
System.out.printf("\n#%d %d", T, result);
}
}
}
}
✅ 후기
열심히 브레인스토밍 하다 도저히 어려워서 구글을 참고하였다,, 어떤 식으로 접근해야하는지에 대해 깨달았고, 다음에는 구글을 참고하지 않을 것이다.
🅰 1227. 미로 2
✏️ 문제 풀이
미로 1번과 마찬가지로 풀었고 배열의 크기만 100*100으로 변경해주었다.
✏️ 소스코드
package queue;
import java.io.*;
import java.util.*;
public class Solution_D4_Sw1227_손은성 {
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 T = Integer.parseInt(br.readLine());
Queue<Integer> q = new LinkedList<>();
int maze[][] = new int[100][100];
int row[] = { -1, 1, 0, 0 };
int col[] = { 0, 0, -1, 1 };
int result = 0;
// 사다리 데이터 입력
for (int i = 0, end = maze.length; i < end; i++) {
String str = br.readLine();
for (int j = 0, end2 = maze.length; j < end2; j++) {
maze[i][j] = str.charAt(j) - '0';
if (maze[i][j] == 2) {
q.offer(i);
q.offer(j);
}
}
}
Loop1: while (!q.isEmpty()) {
int r = q.poll();
int c = q.poll();
for (int i = 0; i < 4; i++) {
int nr = r + col[i];
int nc = c + row[i];
if (maze[nr][nc] == 0) {
q.offer(nr);
q.offer(nc);
maze[nr][nc] = 1;
}
if (maze[nr][nc] == 3) {
result = 1;
break Loop1;
}
}
}
System.out.printf("\n#%d %d", T, result);
}
}
}
✅ 후기
'Swexpert' 카테고리의 다른 글
3234. 준환이의 양팔저울 D4 (0) | 2021.08.20 |
---|---|
[swexpert] Intermediate / Stack2 / 1222, 1223, 1224 (0) | 2021.08.12 |
[swexpert] Intermediate / Stack1 / 1217, 1218, 1219 (0) | 2021.08.12 |
[swexpert] Intermediate / String / 1213, 1215 ,1216 (0) | 2021.08.12 |
[SW Expert Academy] Intermediate / Array1 / 1206. [S/W 문제해결 기본] Flatten (0) | 2021.08.12 |
댓글