반응형
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
- 이진우
- boj
- 상한가 분석
- 테마주
- 급등주 분석
- 주식 상한가
- 경제
- 급등주
- 손경제 요약
- 손에 잡히는 경제
- 경제뉴스 요약
- 코딩테스트
- 이진우의 손에 잡히는 경제
- 상한가
- 상한가 이유
- Programmers
- 손경제
- 경제뉴스
- 주식
- 자바
- 파이썬
- 알고리즘
- 급등 이유
- 백준
- 손에 잡히는 경제 요약
- java
- 프로그래머스
- Python
- 코테
- 주식 분석
Archives
- Today
- Total
Completion over Perfection
백준 10026 - 적록색약 (JAVA 자바) 본문
반응형
백준 10026 - 적록색약 (JAVA 자바)
비교적 쉬운편에 속하는 DFS 문제입니다.
쉬운만큼 기초다지기에 좋은 문제입니다.
저는 아래와 같이 풀었습니다. 참고해주세요~
1. 데이터입력받을 때 1줄씩 받고, charAt 을 통해 한글자씩 잘라서 map[][] 배열에 저장해준다.
2. 색약이 아닌 사람의 경우와 색약인 사람의 경우를 나눠서 2번 DFS를 돌려준다.
3. 색약인 사람의 경우에는 녹색과 적색을 구분 못하므로, G를 R로 모두 바꿔준 후에 DFS를 돌렸다.
4. visits[][] 배열은 두번째 돌리기 전에 초기화를 시켜줘야 된다.
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
import java.util.*;
public class daltonism {
static int n;
static String s;
static char map[][];
static boolean visits[][];
static int dx[] = {-1,0,0,1};
static int dy[] = {0,1,-1,0};
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
map = new char[n+1][n+1];
visits = new boolean[n+1][n+1];
for (int i=0; i<n; i++){
s = sc.next(); // RRRBB
for (int j=0; j<n; j++){
map[i][j] = s.charAt(j); // R R R B B
}
}
// normal 인 경우
int cnt = 0;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(!visits[i][j]){
dfs(i,j);
cnt++;
}
}
}
int normal_cnt = cnt;
cnt=0;
visits = new boolean[n+1][n+1];
// dltonism 인 경우
// G를 R로 바꿔주고 돌린다.
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(map[i][j]=='G'){
map[i][j] = 'R'; // G를 R로 바꿔준다.
}
}
}
//
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(!visits[i][j]){
dfs(i,j);
cnt++;
}
}
}
int abnormal_cnt = cnt;
System.out.println(normal_cnt + " " + abnormal_cnt);
}
public static void dfs(int x, int y){
visits[x][y] = true;
char tmp_char = map[x][y]; // R
for(int i=0; i<4; i++){
int new_x = x+dx[i];
int new_y = y+dy[i];
if (new_x<0 || new_y<0 || new_x>n || new_y>n){
continue;
}
if (!visits[new_x][new_y] && map[new_x][new_y] == tmp_char){
dfs(new_x, new_y);
}
}
}
}
|
cs |
반응형
'앨고리듬 알고리즘' 카테고리의 다른 글
백준 1976 - 여행가자 (JAVA) (0) | 2022.10.12 |
---|---|
백준 2468 - 안전 영역 (JAVA 자바) (0) | 2021.01.28 |
백준 2252 - 줄 세우기 (JAVA 자바) (0) | 2020.12.02 |
백준 2075 - N번째 큰 수 (JAVA 자바) (0) | 2020.11.30 |
백준 4963 - 섬의 개수 (JAVA 자바) (0) | 2020.11.25 |
Comments