Skip to content

Commit 973e948

Browse files
committed
[Silver IV] Title: 오셀로 재배치, Time: 304 ms, Memory: 90524 KB -BaekjoonHub
1 parent b536a45 commit 973e948

2 files changed

Lines changed: 89 additions & 0 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# [Silver IV] 오셀로 재배치 - 13413
2+
3+
[문제 링크](https://www.acmicpc.net/problem/13413)
4+
5+
### 성능 요약
6+
7+
메모리: 90524 KB, 시간: 304 ms
8+
9+
### 분류
10+
11+
그리디 알고리즘, 문자열
12+
13+
### 제출 일자
14+
15+
2025년 1월 28일 00:09:16
16+
17+
### 문제 설명
18+
19+
<p>로봇을 좋아하는 세희는 로봇동아리에서 카메라와 센서, 라즈베리 파이, 집게발을 이용해 로봇을 완성하였다. 이 로봇을 통해서 오셀로 재배치라는 작업을 하려고 한다. 오셀로 말은 앞면이 검정, 뒷면이 흰색으로 된 말이다. 세희의 목표는 로봇을 이용하여 처음 배치된 오셀로 말을 주어진 형태로 바꾸는 일을 하는 것이다. 아래의 예시를 참고하자.</p>
20+
21+
<table class="table table-bordered">
22+
<thead>
23+
<tr>
24+
<th>초기 상태</th>
25+
<th>목표 상태</th>
26+
</tr>
27+
</thead>
28+
<tbody>
29+
<tr>
30+
<td>○●●○○</td>
31+
<td>○●○●○</td>
32+
</tr>
33+
</tbody>
34+
</table>
35+
36+
<p>세희는 로봇을 이용해 2가지 작업 중 하나를 골라 진행할 수 있다.</p>
37+
38+
<ol>
39+
<li>배치된 말 중 임의의 2개의 말을 골라 서로의 위치를 바꾼다.</li>
40+
<li>말 1개를 들어 뒤집어 놓아 색상을 변경한다.</li>
41+
</ol>
42+
43+
<p>위의 예시에서, 3번째와 4번째 말을 2번 작업을 통해 각각 뒤집으면 2번의 작업으로 목표 상태를 만들 수 있다. 하지만 1번 작업을 통해 3번째와 4번째 말을 골라 서로의 위치를 바꾸어주면 1번 만에 목표 상태에 도달할 수 있다. 초기 상태의 말과 목표 상태의 말이 주어질 때, 목표 상태에 도달할 수 있는 최소 횟수를 구하는 프로그램을 작성하시오.</p>
44+
45+
### 입력
46+
47+
<p>입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 각 입력의 첫 번째 줄에는 오셀로 말의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 각 입력의 두 번째 줄과 세 번째 줄에는 각각 오셀로 말의 초기 상태와 목표 상태가 주어진다. 초기 상태와 목표 상태의 말의 개수는 항상 N과 일치한다. 흰색 면이 보이는 경우에는 W, 검은색 면이 보이는 경우에는 B로 주어진다.</p>
48+
49+
### 출력
50+
51+
<p>출력은 표준 출력을 사용한다. 입력받은 데이터에 대해, 한 줄에 1개씩 초기 상태에서 목표 상태를 만들기 위한 작업의 최소 횟수를 구한다.</p>
52+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
6+
public static StringBuilder sb = new StringBuilder();
7+
8+
public static void main(String[] args) throws Exception {
9+
int ts = Integer.parseInt(br.readLine());
10+
11+
for(int t = 0; t < ts; t++) {
12+
int len = Integer.parseInt(br.readLine());
13+
String current = br.readLine();
14+
String target = br.readLine();
15+
16+
int bToW = 0;
17+
int wToB = 0;
18+
19+
for(int i = 0; i < len; i++) {
20+
char curr = current.charAt(i);
21+
char targ = target.charAt(i);
22+
23+
if(curr!=targ){
24+
if(curr=='B'){
25+
bToW++;
26+
}
27+
else{
28+
wToB++;
29+
}
30+
}
31+
}
32+
33+
sb.append(Math.max(bToW, wToB)).append('\n');
34+
}
35+
System.out.print(sb);
36+
}
37+
}

0 commit comments

Comments
 (0)