문제 풀이 날짜: 2023.07.26
포스트 작성일: 2023.07.26
* 학습 목적으로 작성하는 글입니다. 풀이가 정석적이지 못할 수도 있습니다.
문제 출처
SWEA 1220번: Magnetic (D3)
키워드
배열 다루기, 문자열, 구현
풀이 접근법
- 규칙을 찾는 구현 문제. 자석의 움직임을 구현하지 않아도 된다.
- 자석 각각의 개수가 아닌, 교착상태가 된 덩어리의 수를 세야 하므로 주의한다.
- 배열의 세로줄을 탐색하면서, 0이 아닌 것을 모두 String에 이어붙어서 규칙을 체크한다.
- 북쪽이 N극이고 남쪽이 S극이므로 각각의 자석이 모두 끌려간 후, 테이블 위에는 1-2 순서로 붙은 자석만 남아있게 된다. (1-1-2, 1-2-2 모양 또한 가능)
- 이때 String이 1로 시작하고 2로 끝나는 것을 찾을 게 아니라, “12”라는 substring을 몇 개 포함하는지를 알아내면 남아있는 자석의 수를 알 수 있다.
- "12" 모양을 제외하고 그 위와 아래에 붙어있는 자석은 어차피 한 덩어리로 뭉쳐지므로 고려하지 않아도 된다.
코드
import java.util.*;
import java.io.*;
class Solution
{
private static final int SIZE = 100;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = 10;
int[][] matrix = new int[SIZE][SIZE];
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for(int test_case = 1; test_case <= T; test_case++) {
int N = Integer.parseInt(br.readLine());
for(int i = 0; i < SIZE; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < SIZE; j++) {
matrix[i][j] = Integer.parseInt(st.nextToken());
}
}
int answer = 0;
StringBuilder temp;
for(int j = 0; j < SIZE; j++) {
temp = new StringBuilder();
for(int i = 0; i < SIZE; i++) {
if(matrix[i][j] != 0) {
temp.append(matrix[i][j]);
}
}
String result = temp.toString();
result = result.replaceAll("12", "*");
for(int i = 0; i < result.length(); i++) {
if(result.charAt(i) == '*') {
answer++;
}
}
}
sb.append("#").append(test_case).append(" ")
.append(answer).append("\n");
}
System.out.println(sb);
}
}
git 링크
(git 링크 첨부)
'Study > Problem Solving' 카테고리의 다른 글
[백준 / Java] 10799번: 쇠막대기 (실버2) (0) | 2023.07.27 |
---|---|
[SWEA / Java] 4047번: 영준이의 카드 카운팅 (D3) (0) | 2023.07.27 |
[SWEA / Java] 2007번: 패턴 마디의 길이 (D2) (0) | 2023.07.26 |
[백준 / Java] 2941번: 크로아티아 알파벳 (실버5) (0) | 2023.07.25 |
[SWEA / Java] 1493번: 수의 새로운 연산 (D3) (0) | 2023.07.25 |