SW Expert Academy - 1220번(Magnetic)

최지홍·2022년 2월 26일
0

SW Expert Academy

목록 보기
27/36

문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14hwZqABsCFAYD&categoryId=AV14hwZqABsCFAYD&categoryType=CODE&problemTitle=1220&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1&&&&&&&&&


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

public class Solution {

	public static void main(String[] args) throws IOException {
		StringBuilder sb = new StringBuilder();
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
		for (int t = 0; t < 10; t++) {
			int N = Integer.parseInt(reader.readLine()); // 정사각형 한 변의 길이
			
			// 배열 채우기
			int[][] arr = new int[100][100];
			for (int i = 0; i < 100; i++) {
				StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
				for (int j = 0; j < 100; j++) {
					arr[i][j] = Integer.parseInt(tokenizer.nextToken());
				}
			}
			
			int answer = 0;
			
			for (int i = 0; i < 100; i++) {
				boolean flag = false;
				for (int j = 0; j < 100; j++) {
					if (arr[j][i] == 1) flag = true; // N극을 만남
					if (arr[j][i] == 2 && flag) {
						answer++;
						flag = false;
					}
				}
			}
			
			sb.append("#").append(t + 1).append(" ");
			sb.append(answer).append("\n");
		}
		
		System.out.println(sb);
	}

}

  • 규칙성을 찾으면 쉽게 풀 수 있는 문제였다.
  • 처음에 위, 아래 양방향에서 접근하는 방식으로 해결하려 하였는데, 그럴 필요가 없었다. 어느 한쪽을 기준으로 잡고 접근하면 가능한 문제였다.
  • 위쪽이 N극이었는데, 위에서부터 탐색하다가 N극을 만나면 boolean 변수의 값을 true로 바꾸고, S극을 만나면 교착상태가 있다는 뜻이므로 1을 증가하고 boolean을 false로 바꿔 계속 진행하였다.
profile
백엔드 개발자가 되자!

0개의 댓글