1. 문제
2. 접근방법
간단한 시뮬레이션 문제
인덱스 관리를 할때 조금만 신경써주면 되는 문제다.
스위치 번호는 1번부터 시작인데
이걸 번호에 -1을 해서 0번 인덱스부터 시작으로 한다면
남자가 배수만큼씩 스위치 상태를 변화 시킬때 문제가 생긴다.
예를 들어 3번 스위치를 받았을 때 배수를 구하면
3 6 9 12 15 18 ... 인데
-1 하고 배수를 구하면
2 4 6 8 10 ...이 되어버린다.
그래서 나는 이 문제를 3 6 9 12 15 18 ... 을 구하고
스위치에 적용할 때 -1을 해서 2 5 8 11 14 17 ...로 해결했다.
여자는 start end 포인터로 한칸씩 전진하면서 같으면 바꾸고 같으면 바꾸고 반복했다.
마지막으로 출력할 때 출력양식에 조심해서 출력해야한다.
3. 자바 코드
package Silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class P1244스위치켜고끄기 {
public static void main(String[] args) throws Exception{
//남학생은 배수 번호 스위치 상태 바꾸기
//여학생은 번호로 부터 양옆 대칭인 스위치 상태 바꾸기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
boolean switchlist[] = new boolean [N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < N ; i++) {
char status = st.nextToken().charAt(0);
if(status == '1')
switchlist[i] = true;
}
int SN = Integer.parseInt(br.readLine());
for(int i = 0 ; i < SN ; i++) {
st= new StringTokenizer(br.readLine());
int gender = Integer.parseInt(st.nextToken());
int place = Integer.parseInt(st.nextToken());
if(gender == 1) {
for(int j = 1 ; place*j-1 < N ; j++) {
int newplace = place*j-1;
switchlist[newplace] = !switchlist[newplace];
}
}
else {
int start = place-1;
int end = place-1;
switchlist[start] = !switchlist[end];
if(--start <0)
continue;
if(++end >=N)
continue;
while(switchlist[start] == switchlist[end]) {
switchlist[start] = !switchlist[start];
switchlist[end] = !switchlist[end];
if(--start <0)
break;
if(++end >=N)
break;
}
}
}
for(int i = 0 ; i < N-1 ; i++) {
if(switchlist[i])
System.out.print(1 +" ");
else
System.out.print(0+" ");
if(i%20 == 19)
System.out.println();
}
if(switchlist[N-1])
System.out.println(1);
else
System.out.println(0);
}
}
4. 마치며
문제가 어렵지는 않은데
인덱스 관리나 출력양식 부분을 조금 신경써줘야 했던 문제
문제 자체는 재밌었다.
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준] 10158 개미 (0) | 2020.09.23 |
---|---|
[백준] 2477 참외밭 (1) | 2020.09.23 |
[백준] 2564 경비원 (1) | 2020.09.19 |
[백준] 2563 색종이 (0) | 2020.09.19 |
[백준] 17135 캐슬디펜스 (0) | 2020.09.13 |