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
반응형
'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글
조합의 모든것 풀어봅시다 (0) | 2019.08.20 |
---|---|
순열의 모든것 풀어봅시다 (0) | 2019.08.20 |
백준 1941 소문난 칠공주 (0) | 2019.07.28 |
백준 1182 부분수열의 합 (0) | 2019.07.24 |
백준 11723 집합 (0) | 2019.07.24 |
댓글