반응형

 

문제 링크 : https://www.acmicpc.net/problem/1100

 

[백준] 1100번: 하얀 칸 (브론즈2, JAVA)

하얀 칸 위에 말(F)이 있는 칸이 몇개인지 찾는 문제인데, 예제 출력을 보면 아래와 같습니다.

 

 

해당 문제에서 첫번째(왼쪽 맨 위 / 0,0)는 하얀 칸으로 시작하고 그 다음부터 검은 칸이 한번씩 반복되는데, 해당 칸을 기준으로 옆 칸과 아래칸은 검은 칸이 됩니다. 화살표로 표시하게 되면 아래 처럼 되는데, 파란색이 하얀 칸이나 빨간 색이 검은 칸입니다.

 

 

아래 코드로 시작하여 체스판을 입력받고, for문을 통해 로직을 작성합니다. for문의 tempChar는 하얀칸 위에 있는 말을 확인하기 위해 입력받은 체스판을 char 배열로 만들어 줍니다.

public class Main {

	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] chessBoard = new String[8];
        for(int i=0; i<8; i++) {
        	chessBoard[i] = br.readLine();
        }
        
        int count = 0;
        
        for(int i=0; i<8; i++) {
        	
            // 로직 작성
            
        }
        System.out.println(count);
	}
}

 

 

for문 안의 로직은 아래와 같이 작성하는데, 홀수 라인의 경우(검은색으로 시작되는 라인) 짝수 번째가 하얀칸이므로 j를 1부터 시작하고 2씩 증가시켜 하얀 칸만 'F'가 있는지 확인하고 카운트 값을 증가 시킵니다.

그 다음의 짝수 라인의 경우(하얀색으로 시작되는 라인) 홀수 번째가 하얀칸이므로 k를 0부터 시작, 2씩 증가시켜 마찬가지로 하얀 칸만 'F'가 있는지 확인하고 카운트 값을 증가 시킵니다.

// 홀수 라인의 경우 짝수 : 하얀색, 홀수 : 검은색
if(i%2 == 1) {
    for(int j=1; j<8; j+=2) {
        if(tempChar[j] == 'F') { // 해당 라인의 짝수가 하얀색이면 count 증가
            count ++;
        }
    }
}

// 짝수 라인의 경우 짝수 : 검은색, 홀수 : 하얀색
if(i%2 == 0) {
    for(int k=0; k<8; k+=2) {
        if(tempChar[k] == 'F') { // 해당 라인의 홀수가 하얀색이면 count 증가
            count ++;
        }
    }
}

 

 

합친 코드는 아래와 같습니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] chessBoard = new String[8];
        
        for(int i=0; i<8; i++) {
        	chessBoard[i] = br.readLine();
        }
        
        int count = 0;
        
        for(int i=0; i<8; i++) {
        	char[] tempChar = new char[8];
        	tempChar = chessBoard[i].toCharArray();
        	
        	if(i%2 == 1) {
        		for(int j=1; j<8; j+=2) {
        			if(tempChar[j] == 'F') {
        				count ++;
        			}
        		}
        	}
        	
        	if(i%2 == 0) {
        		for(int k=0; k<8; k+=2) {
        			if(tempChar[k] == 'F') { 
        				count ++;
        			}
        		}
        	}
        }
        System.out.println(count);
	}
}
반응형

+ Recent posts