본문 바로가기
문제 풀이/SWEA

1220번 - Magnetic

by Kim Juhwan 2021. 8. 2.

문제의 저작권은 SW Expert Academy에 있습니다. (출처)

1. 문제
   1-1. 문제 설명
   1-2. 문제 해석
2. 코드
3. 실행시간

 

 

 


 

 

1. 문제

1-1. 문제 설명

 

 

1-2. 문제 해석

빨간색 자성체는 S극을 향해가고

파란색 자성체는 N극을 향해 갔을 때

짝을 이루게 되는 그룹의 개수를 구하는 문제이다.

 

처음에는 포문을 돌리면서 모든 자성체들을 한 칸씩 한 칸씩 이동시켜야 하나...? 라는 생각을 했는데

O(n³) 정도 나올 것 같아서 이건 아니다 싶었고...

어차피 자성체의 최종 위치 따위가 필요한 게 아니라 짝을 이루는 지를 판단하면 되기 때문에

세로 방향으로 쭉 읽으면서 검사하는 방법을 사용했다.

flag를 이용해서 짝을 찾으면 cnt++ 하는 식으로 코드를 짜니 쉽게 문제가 풀렸다.

 

 

2. 코드

public class Day2_1220_Magnetic {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		final int N = 100;

		// 테스트 케이스만큼 반복
		for (int tc = 1; tc <= 10; tc++) {
			br.readLine();
			int[][] arr = new int[N][N];
			
			// 입력
			for (int i = 0; i < N; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine(), " ");
				for (int j = 0; j < N; j++) {
					arr[i][j] = Integer.valueOf(st.nextToken());
				}
			}
			
			// 카운트
			int cnt = 0;
			for (int i = 0; i < N; i++) {
				boolean Nturn = true; // N을 찾아야 할 차례 (true)
				for (int j = 0; j < N; j++) {
					if(Nturn && arr[j][i] == 1) {
						Nturn = false; // 이제 N이 아니라 S를 찾아야 할 차례임을 알려준다.
					} else if(!Nturn && arr[j][i] == 2) {
						cnt++; // S를 찾았으니(짝을 찾았으니) cnt를 증가시킨다.
						Nturn = true; // 다시 N을 찾을 차례
					}
				}
			}
			sb.append("#").append(tc).append(" ").append(cnt).append("\n");
		}
		
		System.out.println(sb.toString());
	}
}

 

 

3. 실행시간

오랜만에 다시 1등 :D

 

 

 

 

 


💡 느낀 점

  • 연습을 할 때 수행시간 단축을 목표로 코드를 짜야할지 느리더라도 구조적인 면을 고려해서 짜야할지 고민이 된다.
  • 만약 내가 개발 팀장이고 신입을 뽑는다면... 코드를 더럽게 짜서 실행속도가 빠른 친구보단 조금 느리더라도 팀원들이 보기 좋게 깔끔하게 짜는 사람을 뽑을 것 같다.
  • 다음부턴 두 가지 버전으로 짜볼까...

반응형

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

1213번 - String  (0) 2021.08.03
1210번 - Ladder1  (0) 2021.08.03
1208번 - Flatten  (0) 2021.08.02
1209번 - Sum  (0) 2021.08.02
1206번 - View  (0) 2021.08.01

댓글