반응형
해설
평이한 수준의 시뮬레이션, 구현 문제였다.
남자랑 여자로 스위치 변경 타입을 나눠주고 각 메소드를 분리해서 만들어줬다. 이번에는 메소드를 분리해서 만들었지만 나머지 연산을 사용한다면 굳이 change 메소드까지 만들 필요는 없었다고 생각한다.
구현 문제이니만큼 직관적인 편이었지만 추후 더욱 어려운 구현(시뮬레이션) 문제를 풀기에 앞서서 풀어보기에는 괜찮은 문제라는 생각이 들었다.
메소드를 분리해서 만들면 코드가 길어질 경우에 중복되는 코드를 줄이기 쉽고 직관적인 편이라 알아보기 좋은 것 같다. 메소드 분리와 주석달기는 다른 사람이 아닌 나를 위해서도 습관화하는 것이 좋을 것 같다.
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int switchNum = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] switches = new int[switchNum+1];
for (int i = 1; i < switches.length; i++) {
switches[i]=Integer.parseInt(st.nextToken());
}
int N = Integer.parseInt(br.readLine());
for(int i=0;i<N;i++) {
st = new StringTokenizer(br.readLine());
int gender = Integer.parseInt(st.nextToken());
int number = Integer.parseInt(st.nextToken());
if(gender==1) manSwitch(switches, number); // 남자라면 남자 스위치 타입으로 바꿔주기
else if(gender==2) womanSwitch(switches, number); // 여자라면 여자 스위치 타입으로 바꿔주기
}
for(int i=1;i<switches.length;i++) {
System.out.print(switches[i] + " ");
// if(i%20!=0) System.out.print(" ");
if(i%20==0) System.out.println();
}
}
// 남자는 배수 인덱스만큼 바꿔주면 된다.
public static void manSwitch(int[] switches, int number) {
for(int i=number;i<switches.length;i+=number) {
change(switches, i);
}
}
// 여자 스위치는 데칼코마니 범위까지 바꿔주면 된다.
public static void womanSwitch(int[] switches, int number) {
change(switches, number);
for(int i=1;(number+i<switches.length && number-i>=1);i++) {
if(switches[number+i]==switches[number-i]) {
change(switches, number+i);
change(switches, number-i);
}else {
break;
}
}
}
// 1을 0으로, 0을 1로 바꾸는 메소드
public static void change(int[] switches, int num) {
if(switches[num]==0) switches[num]=1;
else if(switches[num]==1) switches[num]=0;
}
}
반응형