백준 1244 스위치 켜고 끄기
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

백준 1244 스위치 켜고 끄기

by KyeongMin 2019. 7. 28.
728x90
반응형

https://www.acmicpc.net/problem/1244

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩 있다. 셋째 줄에는 학생수가 주어진다. 학생수는 100 이하인 양의 정수이다. 넷째 줄부터 마지막 줄까지 한 줄에 한 학생의 성별, 학생이 받은 수가 주어진다. 남학생은 1로, 여학생은 2로 표시하고, 학생이 받은 수는 스위치 개수 이하인 양의 정수이다. 학생의 성

www.acmicpc.net

상당히 쉬운문제인데 정답비율이 30퍼 이하인 문제 입니다.

그냥 문제에 주어진대로 구현하면되는 문제로 간단히 설명을 해드리면

 

우선 1이면 남학생이고 2이면 여학생인데

남학생은 다음 숫자에 따라서 1이면 0 0이면 1로 바꿔줘야 하는데

숫자가 2라면 다음숫자는 +2인 4 다음은 6 8 이렇게 입력으로 주어진 N까지 확인을 했을때

켜져있으면 끄고, 꺼져있으면 켜놓고

 

여학생은 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include<stdio.h>
int N;
int light[104];
int main(void) {
    scanf("%d"&N);
    for (int i = 1; i <= N; i++) {
        scanf("%d"&light[i]);
    }
    int m;
    scanf("%d"&m);
    for (int i = 0; i < m; i++) {
        int gender, idx;
        scanf("%d %d"&gender, &idx);
 
        if (gender == 1)// 남자면
        {
            for (int cgender = idx; cgender <= N; cgender +=idx)
            {
                light[cgender] = light[cgender] == 0 ?  1 : 0;
            }
        }
        else {//여자면
            int ridx, lidx;
            ridx = idx; lidx = idx;
 
            while (1) {
                if (ridx < 1 || lidx > N) break;
                if (light[ridx] != light[lidx]) break;
                        ridx--; lidx++;
            }
            ridx++;
            lidx--;
                for (; ridx <= lidx; ridx++) {
                    light[ridx] = !light[ridx];
                }
            //else light[idx] = light[idx] == 0 ? 1 : 0;
        }
    }
    for (int i = 1; i <= N; i++) {
        printf("%d ", light[i]); 
        if (i >= 20 && i % 20 == 0)printf("\n");
    }
    return 0;
}
 
 

소스는 이런식으로 간단하니 문제의 조건을 잘확인하시고 있는 그대로 구현하시면 맞습니다.

오늘은 여기까지이고 감사합니다.

728x90
반응형

댓글