광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • DP
  • 자바
  • 합주
  • OS
  • 애플워치 앱
  • 개념
  • 운영체제
  • 티스토리챌린지
  • 드린이
  • 알고리즘
  • 구현
  • 백준
  • 오블완
  • 프로그래머스
  • BFS
  • 다이나믹 프로그래밍
  • 파이썬
  • 애플워치 앱 만들기
  • BOJ
  • 컴퓨터 사이언스

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니
알고리즘/문제 풀이

[JAVA/자바 10026 백준] 적록색약

알고리즘/문제 풀이

[JAVA/자바 10026 백준] 적록색약

2021. 8. 25. 13:25
반응형

https://www.acmicpc.net/problem/10026

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net

풀이

일반적인 bfs 문제

bfs 함수 부분을 한번만 쓰려고 적록색약 아닐때 version=true, 적록색약 일때 version=false로

나눠주고 적록색약인 경우

R과 G를 같은걸로 보니까 R일경우 G를 봐도 큐에 넣어주고

G일경우 R을 봐도 큐에 넣어주고,

check 값을 true로 바꿔줬습니다. 



import java.io.*;
import java.util.*;

class xy{
	int x;
	int y;
	public xy(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}

}
//bfs문 하나만 쓰려고했는데 더 오래걸림,,
// 메모리 초과 안나니까 나눠서 짜는게 더 효율적
public class Main {
	static int n,cnt1,cnt2;
	static char[][] graph;
	static boolean[][] check,check2;
	static Queue<xy> queue=new LinkedList<xy>();
	static StringBuilder sb=new StringBuilder();
	// 상 우 하 좌
	static int[] dx= {-1,0,1,0};
	static int[] dy= {0,1,0,-1};
	public static void main(String[] args) throws Exception {

		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer(br.readLine()," ");

		n=Integer.parseInt(st.nextToken());
		graph=new char[n][n];

		for(int i=0;i<n;i++) {
			String tmp=br.readLine();
			for(int j=0;j<n;j++) {
				graph[i][j]=tmp.charAt(j);
			}
		}
		check=new boolean[n][n];
		check2=new boolean[n][n];
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++) {
				char color=graph[i][j];
				if(check[i][j]==false) {
					bfs(i,j,color,true);
					cnt1+=1;
				}
				if(check2[i][j]==false) {
					bfs(i,j,color,false);
					cnt2+=1;
				}
			}
		}
		System.out.println(cnt1+" "+cnt2);
	}
	private static void bfs(int x, int y, char color,boolean version) {
		// TODO Auto-generated method stub
		if(version==true) {
			check[x][y]=true;

		}
		else {
			check2[x][y]=true;
		}
		queue.offer(new xy(x,y));

		while(!queue.isEmpty()) {
			int q_x=queue.peek().x;
			int q_y=queue.peek().y;
			queue.poll();
			for(int i=0;i<4;i++) {
				int nx=q_x+dx[i];
				int ny=q_y+dy[i];
				if(0<=nx && nx<n && 0<=ny && ny<n ) {
					if(version==true && graph[nx][ny]==color&& check[nx][ny]==false) {
						queue.offer(new xy(nx,ny));
						check[nx][ny]=true;	
					}else if(version==false && graph[nx][ny]==color&& check2[nx][ny]==false) {
						queue.offer(new xy(nx,ny));
						check2[nx][ny]=true;	
					}
					else if(version==false&&color=='R' &&graph[nx][ny]=='G'&& check2[nx][ny]==false){
						queue.offer(new xy(nx,ny));
						check2[nx][ny]=true;						
					}else if(version==false&&color=='G' &&graph[nx][ny]=='R'&& check2[nx][ny]==false){
						queue.offer(new xy(nx,ny));
						check2[nx][ny]=true;						
					}
				}
			}
		}
	}
}
반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[JAVA/자바 SWEA 3124] 최소 스패닝 트리  (0) 2021.09.15
[JAVA/자바 백준 1149] RGB거리  (0) 2021.09.15
[Java SWEA 1247] 최적 경로  (0) 2021.08.19
[JAVA/자바 1992 백준] 쿼드트리  (0) 2021.08.18
[JAVA SWEA 1210 ] Ladder1  (0) 2021.08.04
  • 풀이
'알고리즘/문제 풀이' 카테고리의 다른 글
  • [JAVA/자바 SWEA 3124] 최소 스패닝 트리
  • [JAVA/자바 백준 1149] RGB거리
  • [Java SWEA 1247] 최적 경로
  • [JAVA/자바 1992 백준] 쿼드트리
광규니
광규니
공부 및 일상 올리기~

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.