문제요약
나의 코드 및 설명
t = int(input())
for test_case in range(1, t+1):
n = int(input())
first_list = list(input())
goal_list = list(input())
compare = []
for i in range(n):
if first_list[i] != goal_list[i]: #초기 상태와 목표 상태가 다를 때,
compare.append(first_list[i]) #다른 말을 리스트에 넣는다.
print(max(compare.count("W"),compare.count("B"))) #W와 B중 많은 것의 개수를 출력한다.
피드백
시간초과가 뜨는 바람에 결국 다른 사람의 코드를 참고하였다. 처음에 이 풀이를 보았을 때 이해가 되지 않았다. 아니 왜 초기상태와 목표상태를 비교하고 다른 말을 리스트에 넣고, 그 말 중 더 많은 것의 개수를 출력하는 걸까? 상당히 뜬금없는 꼼수적인 풀이라 생각했는데, 예를 들어 생각해보니 생각보다 간단했다. 예를 들어 초기상태가 WWBBW이고, 목표상태가 WBWWW 이라고 치자. 다른 말은 초기상태 기준으로 WBB일 것이다. 즉 WBB 를 BWW로 바꾸면 되는데, WB는 BW으로 카운트 한번으로 바꿀 수 있고, 나머지 B만 W로 바꿔주면 되므로 더 많은 말인 B의 개수만 카운트 해주면 된다.
'Baekjoon' 카테고리의 다른 글
[백준] 11650 좌표 정렬하기 (실버5) / key = lambda x: ~ (0) | 2023.05.09 |
---|---|
[백준] 1018 체스판 다시 칠하기 (실버4) (0) | 2023.05.07 |
[백준] 1181 단어 정렬 (실버5) / key = lambda x: ~ (0) | 2023.05.07 |
[백준] 1251 단어 나누기 (실버5) / 문자열 (0) | 2023.04.28 |
[백준] 1120 문자열 (실버5) / 문자열 (0) | 2023.04.27 |