티스토리 뷰
728x90
https://www.acmicpc.net/problem/13413
- 문제 :
로봇을 좋아하는 세희는 로봇동아리에서 카메라와 센서, 라즈베리 파이, 집게발을 이용해 로봇을 완성하였다. 이 로봇을 통해서 오셀로 재배치라는 작업을 하려고 한다. 오셀로 말은 앞면이 검정, 뒷면이 흰색으로 된 말이다. 세희의 목표는 로봇을 이용하여 처음 배치된 오셀로 말을 주어진 형태로 바꾸는 일을 하는 것이다. 아래의 예시를 참고하자.
초기 상태목표 상태
○●●○○ | ○●○●○ |
세희는 로봇을 이용해 2가지 작업 중 하나를 골라 진행할 수 있다.
- 배치된 말 중 임의의 2개의 말을 골라 서로의 위치를 바꾼다.
- 말 1개를 들어 뒤집어 놓아 색상을 변경한다.
위의 예시에서, 3번째와 4번째 말을 2번 작업을 통해 각각 뒤집으면 2번의 작업으로 목표 상태를 만들 수 있다. 하지만 1번 작업을 통해 3번째와 4번째 말을 골라 서로의 위치를 바꾸어주면 1번 만에 목표 상태에 도달할 수 있다. 초기 상태의 말과 목표 상태의 말이 주어질 때, 목표 상태에 도달할 수 있는 최소 횟수를 구하는 프로그램을 작성하시오.
- 풀이 :
바꾸어야할 B과 W말의 개수를 카운트한 후
B개수와 W개수의 차이만큼 2번 작업을 수행한다. 또한 B개수와 W개수중 낮은 값만큼 1번 작업을 수행한다
이 두 값의 합이 최종 횟수이다.
- 소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import sys
input = sys.stdin.readline
if __name__ == "__main__":
for _ in range(int(input())):
n = int(input())
start = input().strip('\n')
des = input().strip('\n')
answer = []
for i in range(len(start)):
if start[i] != des[i]:
answer.append(start[i])
b_cnt = answer.count('B')
w_cnt = answer.count('W')
print(abs(b_cnt-w_cnt) + min(b_cnt,w_cnt))
|
cs |
320x100
'Algorithm > Greedy' 카테고리의 다른 글
(Python) - BOJ(16112번) : 5차 전직 (0) | 2022.02.11 |
---|---|
(Python) - BOJ(14247번) : 나무 자르기 (0) | 2022.02.10 |
(Python) - BOJ(13305번) : 주유소 (0) | 2022.02.09 |
(Python) - BOJ(13019번) : A를 B로 (0) | 2022.02.09 |
(Python) - BOJ(12927번) : 배수 스위치 (0) | 2022.02.09 |
댓글
© 2022 WonSeok, All rights reserved