SSAFY/SWEA

[SWEA] 1220 : Magnetic

믕비 2023. 4. 27. 17:43

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AV6kld8aisgDFASb&contestProbId=AV14hwZqABsCFAYD&probBoxId=AV-4MojKLNADFATz&type=PROBLEM&problemBoxTitle=%5BD2~D3+%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4%5D+%EA%B8%B0%EC%B4%88+%EB%8B%A4%EC%A7%80%EA%B8%B0+Part4&problemBoxCnt=14 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

문제에 제시된 시각자료 때문에 어떻게 탐색할지 조금 헤맸음.

제시된 조건에 없다면 괜히 시간 들여서 고민하지 말자.

단순하게 1과 2가 각각 위 아래로 탐색할 때 만난다면 교착상태++ 해줬음. 이때 중복이 발생하므로 2로 나눠줬다.

 

내 코드

메모리 : 32456 KB

시간 : 146 ms

코드길이 : 1882 B

 

[내 코드]

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

public class Solution {
	static int[][] graph;
	static int result;
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st;
		
		for(int t = 1; t <= 10; t++) {
			sb.append('#').append(t).append(' ');
			int length = Integer.parseInt(br.readLine());
			graph = new int[100][100];
			result =  0;
			//그래프입력
			for(int row = 0; row < 100; row++) {
				st = new StringTokenizer(br.readLine());
				for(int column = 0; column < 100; column++) {
					graph[row][column] = Integer.parseInt(st.nextToken());
				}
			}
			for(int column = 0; column < 100; column++) {
				search(column);
			}
			result /= 2;
			sb.append(result).append('\n');
		}
		System.out.print(sb);
	}
	
	public static void search(int column) {
		for(int row = 0; row < 100; row++) {
			//1(N)이면 아래 탐색
			if(graph[row][column] == 1) {
				//row가 99이면 빠져나감
				if(row == 99)
					graph[row][column] = 0;
				else {
					//아래가 같은 1(N)이면 아무것도x
					//아래가 2(S)이면 교착상태.
					if(graph[row + 1][column] == 2)
						result++;
					//아래가 0이면 밑으로 내려줌
					else if(graph[row + 1][column] == 0) {
						graph[row][column] = 0;
						graph[row + 1][column] = 1;
					}
				}
			}
			//2(S)이면 위 탐색
			else if(graph[row][column] == 2) {
				//row가 0이면 빠져나감
				if(row == 0)
					graph[row][column] = 0;
				else {
					//위가 같은 2(S)이면 아무것도x
					//위가 1(N)이면 교착상태.
					if(graph[row - 1][column] == 1)
						result++;
					//위가 0이면 위로 올려줌
					else if(graph[row][column] == 0) {
						graph[row][column] = 0;
						graph[row - 1][column] = 2;
					}
				}
			}
		}
	}

}

 

'SSAFY > SWEA' 카테고리의 다른 글

[SWEA] 1225 : 암호생성기  (0) 2023.04.27
[SWEA] 1221 : GNS  (0) 2023.04.27
[SWEA] 1217 : 거듭제곱  (0) 2023.04.27
[SWEA] 1216 : 회문 2  (0) 2023.04.27
[SWEA] 1244 : 최대 상금  (0) 2023.04.26