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
- 스프링 에러
- leetcode 1721
- java leetcode
- 그래프 자바
- 리트코드
- 자바 5464
- 구현
- 스택
- 자바 리트코드
- 리트코드 1557
- 코테
- leetcode
- 프로그래머스 java
- 백준
- 리트코드 자바
- 자바
- 분할정복
- 프로그래머스
- 파이썬
- 백준 18222
- 백준 16935
- Java
- BFS
- daily challenge
- 인텔리제이 에러
- dfs
- java 프로그래머스
- DP
- 코딩테스트
- 카카오
Archives
- Today
- Total
레벨업 일지
[Java] 백준 10026 적록색약 본문
문제
https://www.acmicpc.net/problem/10026
특별한 조건 없는 일반적인 2차원 배열 탐색 문제
풀이
풀이 알고리즘은 다음과 같다.
- 적록색약이 있으면 if문으로 1 또는 2 에 해당하는지 검사하면서 dfs한다.
- 색약이 없는 경우 dfs 하면서 메소드 부른 횟수를 카운팅 한다.
- 정답을 리턴한다.
코드
package solve;
import java.io.*;
import java.util.*;
public class Main {
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
public static void main(String[] args) throws IOException {
Main m = new Main();
m.solution();
}
public void solution() throws IOException {
FastReader fr = new FastReader();
int n = fr.nextInt();
int map[][] = new int[n][n];
String str ;
int k=0;
char c;
for(int i=0 ;i < n; i++){
str = fr.nextLine();
for(int j = 0 ;j < n; j++){
c = str.charAt(j);
switch (c){
case 'R':
k =0;
break;
case 'G':
k = 1;
break;
case 'B':
k =2 ;
break;
}
map[i][j] = k;
}
}
int a = getN(map, false);
int b = getN(map, true);
System.out.println(a + " " + b);
}
public int getN(int[][] m, boolean flag){
int n = m.length;
boolean v[][] = new boolean[n][n];
int ret =0;
for(int i =0 ;i <n ;i++){
for(int j = 0 ;j < n ;j++){
if(!v[i][j]){
v[i][j] = true;
dfs(m, v, i, j, flag, m[i][j]);
ret++;
}
}
}
return ret;
}
public void dfs(int[][] m, boolean[][] v, int x, int y, boolean f, int type){
for(int k =0 ;k <4; k++){
int nx = x + dx[k];
int ny = y + dy[k];
if(nx < 0 || ny < 0 || nx > m.length-1 || ny > m.length-1 || v[nx][ny] )continue;
if(f && (type ==1 || type ==0)){
if(m[nx][ny] ==2 )continue;
} else if (m[nx][ny] != type) {
continue;
}
v[nx][ny] = true;
dfs(m, v, nx, ny, f, type);
}
}
public static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 2573.빙산 (0) | 2023.05.15 |
---|---|
[Java] 백준 16236. 아기 상어 (0) | 2023.05.15 |
[Java] 백준 10986 나머지 합 (2) | 2023.05.12 |
[Java] 백준 1806. 부분합 (0) | 2023.05.12 |
백준 제로베이스 대회 후기 (0) | 2023.04.12 |
Comments