[BaekJoon] 35296번 - 아침 점호 [Java][C++]
[BaekJoon] 35296번 - 아침 점호 [Java][C++]
1. 문제 풀이
주어진 출석표에서 출석 체크가 안된 학생은 자신의 출석과 자기 번호와 1 차이가 나면서 출석부 칸에서 인접한 학생까지 체크할 수 있다. 최소의 학생으로 출석을 전부해야하는데 이는 1번부터 출석을 안한 학생이면 자기 번호를 체크하고 다른 사람 번호도 체크할 수 있으면 최대한 체크하면 된다. 이때 자신 바로 아랫칸이 체크가 안됐으면 체크를 해주면 되며 출석부가 한 행으로만 구성되어 있으면 오른쪽 칸이 체크가 안됐으면 체크를 해주면 된다. 윗칸이나 왼쪽칸은 자신 이전의 누군가가 먼저 판단 대상이기 때문에 볼 필요가 없다.
2. 코드
1. 풀이 [Java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
char[][] grid = new char[n][m];
for (int i = 0; i < n; i++) {
grid[i] = br.readLine().toCharArray();
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] == 'O') continue;
if (i < n - 1 && grid[i + 1][j] == 'X') {
sb.append("2 ").append(i + 1 + n * j).append(" ").append(i + 2 + n * j).append("\n");
grid[i][j] = 'O';
grid[i + 1][j] = 'O';
} else if (n == 1 && j < m - 1 && grid[i][j + 1] == 'X') {
sb.append("2 ").append(i + 1 + n * j).append(" ").append(i + 1 + n * (j + 1)).append("\n");
grid[i][j] = 'O';
grid[i][j + 1] = 'O';
} else {
sb.append("1 ").append(i + 1 + n * j).append("\n");
grid[i][j] = 'O';
}
cnt++;
}
}
System.out.println(cnt);
System.out.println(sb);
}
}
2. 풀이 [C++]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100;
char grid[101][101];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> grid[i];
}
int cnt = 0;
string res;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (grid[i][j] == 'O') continue;
if (i < n - 1 && grid[i + 1][j] == 'X') {
res += "2 " + to_string(i + 1 + n * j) + " " + to_string(i + 2 + n * j) + "\n";
grid[i][j] = 'O';
grid[i + 1][j] = 'O';
} else if (n == 1 && j < m - 1 && grid[i][j + 1] == 'X') {
res += "2 " + to_string(i + 1 + n * j) + " " + to_string(i + 1 + n * (j + 1)) + "\n";
grid[i][j] = 'O';
grid[i][j + 1] = 'O';
} else {
res += "1 " + to_string(i + 1 + n * j) + "\n";
grid[i][j] = 'O';
}
cnt++;
}
}
cout << cnt << '\n';
cout << res;
}
This post is licensed under CC BY 4.0 by the author.