문제풀이/백준oj
[백준OJ] 13413번 오셀로 재배치
Hyeon-Uk
2022. 12. 5. 22:37
반응형
https://www.acmicpc.net/problem/13413
13413번: 오셀로 재배치
로봇을 좋아하는 세희는 로봇동아리에서 카메라와 센서, 라즈베리 파이, 집게발을 이용해 로봇을 완성하였다. 이 로봇을 통해서 오셀로 재배치라는 작업을 하려고 한다. 오셀로 말은 앞면이 검
www.acmicpc.net
풀이
2가지 작업중 하나를 골라서 최소 횟수로 원하는 목표상태를 만들어야 합니다.
따라서 초기상태와 목표상태를 비교하여 Black -> White 의 개수와 White -> Black의 개수를 카운트 해준 뒤, 짝을 맞춰서 맞는짝은 1번작업을, 나머지는 2번작업을 해줍니다.
예를들어 아래와 같은 상황인 경우
WBBWW
WBWBW
Black -> White 의 개수는 1개, White -> Black 의 개수는 1개입니다. 따라서 1번 작업을 통해 서로를 바꿔주면 1번만에 해결됩니다.
다음 예시를 보면
BBBBBBB
BWBWBWB
B -> W 는 3개, W -> B는 0개입니다. 아무리 1번작업을 여러번 한다해도 맞출 수 없기때문에 2번작업을 3번 해줘서 목표를 맞추는 방법뿐입니다.
마지막 예시를 보면
WWBB
BBWB
B -> W 는 2개, W -> B는 2개입니다. 따라서 짝맞춰서 1번작업을 2번해주면 목표를 만들 수 있습니다.
시간복잡도
테스트케이스를 제외하면, 선형시간이 걸리기때문에 O(N)이 됩니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.valueOf(br.readLine());
while (t-- > 0) {
int n = Integer.valueOf(br.readLine());
String str1 = br.readLine();
String str2 = br.readLine();
int blackToWhite = 0;
int whiteToBlack = 0;
for (int i = 0; i < n; i++) {
if(str1.charAt(i) != str2.charAt(i)){
if(str1.charAt(i)=='B'){
blackToWhite++;
}
else{
whiteToBlack++;
}
}
}
int answer = Math.min(blackToWhite,whiteToBlack) + Math.abs(blackToWhite-whiteToBlack);
System.out.println(answer);
}
}
}
반응형