Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Kotlin
- rxandroid
- 공유오피스
- media3
- 코틀린
- innernavigation
- 안드로이드
- 싱글액티비티
- 파이썬
- 내부프레그먼트
- 중첩네비게이션
- 재밌긴함
- media3 transformer
- Stack
- MVVM
- 패스트파이브
- 후기
- 사무실
- 너무 어렵다
- 패파
- 아키텍쳐
- 알고리즘
- 자바
- 스택
- Android
- parentfragment
- 백준
- childfragment
- SAA
- fragmentcontainer
Archives
삽질도사
[백준] 빙고 2578 자바 본문
로직이 비슷해서 복붙하다가 실수한지도 모르고 엄청 꼬였었습니다...
이 문제에서 얻을 점은 맵의 사이즈가 작아서 무식하게 풀어도 풀린다는 점을 문제를 보고 알 수 있어야 한다는 점정도이고, 구현 문제라함은 가능한 실수가 없이 정리를 잘해가면서, 차근차근 풀어야 한다는 점을 상기시켰습니다.
개인적으로 구현문제를 풀 때에 맵이 존재하면 중간에 로직을 짜다가 맵을 보여주는 함수를 만들어서 확인할 때가 종종 있습니다. 이번 경우에는 제가 실수를 함으로써 무엇이 잘못되었나 확인하는데에 사용했었습니다.
제 코드에서 map을 3차원으로 만듬으로써 저는 [5][5]짜리 맵이 두 개 있는 듯한 효과를 주었습니다. 이러한 코드방식은
이후에 벽부수고 이동하기 등 bfs에서 종종 쓰이기도 합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 빙고 {
static int[][][] map = new int[5][5][2];
static int bingo, ans;
static boolean func() {
bingo = 0;
int check = 0;
// 가로
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 5; x++) {
if (map[y][x][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
}
// 세로
for (int x = 0; x < 5; x++) {
for (int y = 0; y < 5; y++) {
if (map[y][x][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
}
//대각선
for (int q = 0; q < 5; q++) {
if (map[q][q][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
//대각선
for (int q = 0; q < 5; q++) {
if (map[q][4 - q][1] != 0)
check++;
}
if (check == 5) {
bingo++;
}
check = 0;
//결과
if (bingo >= 3) {
return true;
} else {
return false;
}
}
static void find(int n) {
for (int y = 0; y < 5; y++) {
for (int x = 0; x < 5; x++) {
if (map[y][x][0] == n)
map[y][x][1] = 1;
}
}
}
static void show() {
for (int y = 0; y < 5; y++) {
System.out.println();
for (int x = 0; x < 5; x++) {
System.out.print(map[y][x][1] + " ");
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for (int y = 0; y < 5; y++) {
st = new StringTokenizer(br.readLine());
for (int x = 0; x < 5; x++) {
map[y][x][0] = Integer.parseInt(st.nextToken());
}
}
for (int y = 0; y < 5; y++) {
st = new StringTokenizer(br.readLine());
for (int x = 0; x < 5; x++) {
int next = Integer.parseInt(st.nextToken());
ans++;
find(next);
if (func()) {
// show();
System.out.println(ans);
break;
}
// else
// show();
// System.out.println();
}
}
}
}
'백준' 카테고리의 다른 글
[백준] 파일정리 20291 자바 (0) | 2021.03.12 |
---|---|
[백준] 스위치 켜고 끄기 1244 자바 (0) | 2021.03.12 |
[백준] 택배 8980 자바 (0) | 2021.03.09 |
[백준] 오리 12933 자바 (0) | 2021.03.09 |
[백준] 달팽이 1913 자바 (0) | 2021.03.09 |