https://www.acmicpc.net/problem/1244
1244, 스위치 켜고 끄기
[ 난이도 : 실버 4 ]
이번 문제는 구현 문제이다.
쉬운 문제인데, 다른 부분은 다 쉽게 해결했는데 배수 구하는 부분을 잘못생각해서 이상하게 구현하여 고생을 좀 했다.
부디 같은 실수를 하는 사람이 없길 바란다 ..
# Process
input
: 스위치의 개수, 스위치 여부와 학생 수를 차례로 받아준다.
이번 문제에서는 스위치를 스위칭 해야 하기 때문에 change 라는 배열을 생성해주었다.
change[0] = 1, change[1] = 0 을 사용하여 쉽게 값을 바꾸려는 의도이다.
static int N, num;
static int[] arr, change;
static void input()
{
N = scan.nextInt();
arr = new int[N+1];
for(int i=1; i<=N; i++) arr[i] = scan.nextInt();
num = scan.nextInt();
change = new int[2];
change[0] = 1; change[1] = 0;
}
구현
: if 말고 switch를 통해 구현하였다. 학생 수만큼 입력을 받아주고 성별에 맞게 스위치 해준다.
남학생의 경우엔 배수의 스위치들을 모두 바꿔줘야 한다.
여학생의 경우엔 해당 번호의 스위치는 무조건 바꾸고, 하나씩 넓혀가며 양 옆이 대칭이면 바꿔주는 로직이다.
여기서 또 주의해야 할 사항은 21번째에는 줄 바꿈을 해주면 된다.
for 문을 돌려가며 20의 배수에선 \n 으로 줄바꿈을 진행해주면 된다.
static void pro()
{
int gender, where;
while(num-- >0)
{
gender = scan.nextInt(); where = scan.nextInt();
switch(gender)
{
// 남학생
case 1 :
for(int j=1; j<=N; j++)
{
int db = j*where;
if(db>N) break;
arr[db] = change[arr[db]];
}
break;
// 여학생
case 2 :
arr[where] = change[arr[where]];
int index = 1;
while(where-index > 0 && where+index <= N)
{
if(arr[where-index] != arr[where+index]) break;
arr[where-index] = change[arr[where-index]];
arr[where+index] = change[arr[where+index]];
index++;
}
break;
}
}
for(int i=1; i<=N; i++)
{
sb.append(arr[i]+" ");
if(i%20 == 0) sb.append("\n");
}
System.out.println(sb);
}
전체 코드
static int N, num;
static int[] arr, change;
static void input()
{
N = scan.nextInt();
arr = new int[N+1];
for(int i=1; i<=N; i++) arr[i] = scan.nextInt();
num = scan.nextInt();
change = new int[2];
change[0] = 1; change[1] = 0;
}
static void pro()
{
int gender, where;
while(num-- >0)
{
gender = scan.nextInt(); where = scan.nextInt();
switch(gender)
{
// 남학생
case 1 :
for(int j=1; j<=N; j++)
{
int db = j*where;
if(db>N) break;
arr[db] = change[arr[db]];
}
break;
// 여학생
case 2 :
arr[where] = change[arr[where]];
int index = 1;
while(where-index > 0 && where+index <= N)
{
if(arr[where-index] != arr[where+index]) break;
arr[where-index] = change[arr[where-index]];
arr[where+index] = change[arr[where+index]];
index++;
}
break;
}
}
for(int i=1; i<=N; i++)
{
sb.append(arr[i]+" ");
if(i%20 == 0) sb.append("\n");
}
System.out.println(sb);
}
문제만 잘 읽으면 전혀 어려운 문제가 아니기 때문에 필자와 같은 실수를 반복하지 않았으면 좋겠다.