Skip to content

Commit 91b319d

Browse files
committed
[Silver IV] Title: 청기 백기, Time: 36 ms, Memory: 34536 KB -BaekjoonHub
1 parent 1f546f4 commit 91b319d

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# [Silver IV] 청기 백기 - 15736
2+
3+
[문제 링크](https://www.acmicpc.net/problem/15736)
4+
5+
### 성능 요약
6+
7+
메모리: 34536 KB, 시간: 36 ms
8+
9+
### 분류
10+
11+
수학, 정수론
12+
13+
### 제출 일자
14+
15+
2025년 6월 5일 21:35:11
16+
17+
### 문제 설명
18+
19+
<p>소프트웨어융합대학 학생회에서 주최한 소융체전에서 청기 백기 뒤집기 게임이 한창이다. 소프트웨어학부, ICT융합학부가 번갈아가면서 게임을 진행하는 중이다. 게임의 규칙은 간단하다. 게임을 진행할 차례인 학부에서 출전한 선수들 N명이 존재한다. 학생들의 앞 탁자에는 N개의 깃발이 청색이 위로 백색이 아래로 보이도록 놓여있다. 이때 출전한 선수 중 첫 번째 선수는 N개의 깃발 중 1의 배수에 해당하는 번호의 깃발을 뒤집어 놓는다. 다음 두 번째 선수는 N개의 깃발 중 2의 배수에 해당하는 번호의 깃발을 뒤집어 놓는다. i 번째 선수는 i의 배수에 해당하는 번호의 깃발을 뒤집고, N 번째 선수까지 진행하면 끝이 난다. 그렇다면 이 게임에서 N 명의 선수가 참가하고 N개의 깃발이 존재할 때, N 번째 선수까지 진행하여 완료된 상태에서 백색이 위로 놓여있는 깃발의 수가 몇 개인지 알아보자.</p>
20+
21+
### 입력
22+
23+
<p>첫 번째 줄에 출전한 학생의 수이자, 깃발의 개수인 N(1 ≤ N ≤ 2,100,000,000)이 주어진다.</p>
24+
25+
### 출력
26+
27+
<p>첫 번째 줄에 N 번째 선수까지 진행한 후의 상태의 깃발 중 백색이 위로 놓여있는 깃발의 수를 출력한다.</p>
28+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# 15736 청기 백기
2+
# 실버 4
3+
4+
import sys, math
5+
input = sys.stdin.readline
6+
7+
# 출전한 학생 수이자 깃발 수
8+
N = int(input())
9+
10+
# 최종적으로 백색인 깃발은 약수의 개수가 홀수인 번호 뿐임
11+
# 약수가 홀수 개인 경우는 완전제곱수 뿐!
12+
print(math.isqrt(N)) # ⌊√N⌋를 정수로 바로 돌려줌
13+
14+
15+
""" 메모리 초과 (브루트포스)
16+
17+
# 초기 깃발은 청색=0 / 백색=1
18+
flags = [0]*N
19+
20+
# i번째 학생
21+
for i in range(1, N+1):
22+
# i의 배수의 깃발 뒤집기
23+
tmp = i
24+
while tmp < N:
25+
if flags[tmp] == 0:
26+
flags[tmp] = 1
27+
else:
28+
flags[tmp] = 0
29+
tmp += i
30+
31+
# N번째 학생까지 진행 후 백색 깃발 수
32+
print(flags.count(1))
33+
34+
"""

0 commit comments

Comments
 (0)