문제의 저작권은 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. 실행시간
💡 느낀 점
- 연습을 할 때 수행시간 단축을 목표로 코드를 짜야할지 느리더라도 구조적인 면을 고려해서 짜야할지 고민이 된다.
- 만약 내가 개발 팀장이고 신입을 뽑는다면... 코드를 더럽게 짜서 실행속도가 빠른 친구보단 조금 느리더라도 팀원들이 보기 좋게 깔끔하게 짜는 사람을 뽑을 것 같다.
- 다음부턴 두 가지 버전으로 짜볼까...
반응형
'문제 풀이 > 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 |
댓글