본문 바로가기

PS/백준

[BOJ] 백준 1343 폴리오미노 (Swift)

반응형

문제

풀이

"XXXX" -> "AAAA", "XX" -> "BB"로 치환해주는 문제입니다.

Swift에서는 replacingOccurrences(of:with:) 메서드를 사용해 손쉽게 문자열을 치환할 수 있습니다.

https://developer.apple.com/documentation/foundation/nsstring/1412937-replacingoccurrences/

 

replacingOccurrences(of:with:) | Apple Developer Documentation

Returns a new string in which all occurrences of a target string in the receiver are replaced by another given string.

developer.apple.com

사전순으로 앞선 문자열을 구하기 위해, "XXXX"를 "AAAA"로 치환하는 작업을 먼저 진행해주어야 합니다.

왜냐하면 연속된 "X"가 4의 배수이거나 2의 배수일 때, 치환이 가능한데
2는 4의 약수이기 때문에 4의 배수일 때를 먼저 확인해주어야 합니다.
그리디 알고리즘의 관점으로 풀이할 수 있습니다.

그 이후, 치환된 문자열에 "X"가 남아있다면, 덮을 수 없는 경우이기 때문에 -1을 출력해주고
"X"가 남아있지 않다면, 치환된 문자열을 출력해주면 됩니다.

replacingOccurrences(of:with:) 메서드를 사용하지 않고도 풀이할 수 있습니다.

연속된 X를 입력받은 후,
X가 홀수라면 불가능이고 홀수가 아니라면
X를 4로 나눈 몫 * "AAAA" + X를 4로 나눈 나머지를 2로 나눈 몫 * "BB" 만큼 출력해주면 됩니다.

예를들어 "XXXXXX"란 문자열이 들어왔을 때,
"AAAA"를 (6 / 4) = 1번 출력 + "BB"를 (6 % 4 / 2) = 1번 출력
-> "AAAABB"란 문자열로 만들어 줄 수 있습니다.

입력받은 문자열을 하나씩 확인하면서,
문자열이 X라면, 연속된 X를 담고있는 변수에 계속해서 더해주고
문자열이 .이라면 연속된 X를 치환해주고, 정답으로 출력할 변수에 더해주는 방식으로 풀이할 수 있습니다.

소스코드

후기

replacingOccurrences(of:with:) 메서드를 알고있다면 쉽게 풀 수 있는 문제입니다.

이 메서드를 모르고 있어도, 문자열을 어떻게 치환해줄지 생각해서 풀이할 수 있습니다.

반응형