문제 출처 : https://www.acmicpc.net/problem/12927
문제
설명
실버4로, 평이한 난이도의 문제였습니다.
스위치를 앞에서부터 하나씩 비교해 나가면서, 스위치의 상태가 서로 다르면 뒤에 것을 눌러 그 배수의 스위치까지 모두 반전시켰습니다.
그렇게 해 나가면서 스위치의 끝까지 진행한 후에, 스위치가 모두 Y거나 N으로 구성된 상태라면 전구를 모두 끌 수 있다는 뜻이므로 cnt값을 출력했습니다. 그렇지 않다면 모두 끌 수 없는 상태라는 뜻이기 때문에 -1을 출력하도록 했습니다.
코드
import java.util.Scanner;
public class BOJ12927_Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
char[] lights = new char[s.length()+1];
for(int i=1; i<lights.length; i++) {
lights[i] = s.charAt(i-1);
} //번호가 1번부터 시작하므로.
//입력 완료
int cnt=0;
for(int i=1; i<lights.length-1; i++) {
if(lights[i]==lights[i+1]) { //붙어있는 두 개의 스위치가 같다면, 넘어감
continue;
} else { //다르다면, i+1번째 스위치를 누름
for(int j=1; j<lights.length; j++) { //배수 스위치는 다 반전시켜 줌
if(j%(i+1)==0) {
if(lights[j]=='Y') {
lights[j]='N';
}else {
lights[j]='Y';
}
}
}
cnt++; //스위치를 눌렀으므로, 수 증가
}
}
int numY=0, numN=0;
for(int i=1; i<lights.length; i++) {
if(lights[i]=='Y') {
numY++;
} else {
numN++;
}
}
if(numY==lights.length-1) { //모두 Y로 구성되어 있다면
System.out.println(cnt+1); //마지막은 N으로 바꿔줘야 하므로 +1
} else if(numN==lights.length-1) { //모두 N으로 구성되어 있다면
System.out.println(cnt); //cnt그대로 프린트
} else { //그렇지 않고 Y, N이 섞여 있다면
System.out.println(-1); //스위치를 모두 끌 수 없는 상태이므로 -1 출력
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준][JAVA] 1149번 - RGB거리 (0) | 2021.10.21 |
---|---|
[백준][JAVA] 10026 - 적록색약 (0) | 2021.10.17 |
[백준][JAVA] 2559 - 수열 (0) | 2021.10.10 |
[백준][JAVA] 2304 - 창고 다각형 (0) | 2021.10.10 |
[백준][JAVA] 2578 - 빙고 (0) | 2021.10.10 |