-Code
1. 처음코드
n, k, q, m = map(int, input().split())
sleep = list(map(int, input().split()))
code_take = list(map(int, input().split()))
for _ in range(m):
s, e = map(int, input().split())
students = [i for i in range(s, e + 1)]
for i in code_take:
for j in range(i, e + 1, i):
if j not in students:
continue
if j not in sleep:
students.remove(j)
print(len(students))
처음에 위와 같이 작성하고 예시 입출력은 맞았으나 이유는 모르겟으나 틀려서 찾아보니 딱히 정보가 없어서 다른 코드로 바꿔야 했습니다.
2. 고친코드
import sys
input = sys.stdin.readline
n, k, q, m = map(int, input().split())
sleep = list(map(int, input().split()))
code_take = list(map(int, input().split()))
sleep_check = [0] * (n + 3)
take_check = [0] * (n + 3)
for i in sleep:
sleep_check[i] = 1
for take in code_take:
if sleep_check[take]:
continue
for i in range(take, n + 3, take):
if i not in sleep:
take_check[i] = 1
dp = [take_check[0]]
for i in range(1, n + 3):
dp.append(dp[i - 1] + take_check[i])
for _ in range(m):
s, e = map(int, input().split())
print(e - s + 1 - (dp[e] - dp[s - 1]))
그래서 다른 코드는 sleep에 있는 수일 경우는 패스하고 다른 경우 전부 1로 바꿔주고 s, e에 따라서 바꾸는 코드인데 출력할때 그냥 e - s - (dp[e] - dp[s])로하야사 틀렸니다. 그래서 생각해보니 범위문에 문제가 생긴 거같아서 찾이서 바로 잡하서 해결은 했습니다. 하지만 정확히 문제점을 모르고 첫 시도 이후 많이 찾아봐서 아쉬웠습니다.
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬] 20154번 이 구역의 승자는 누구야?! (0) | 2022.05.13 |
---|---|
[백준/파이썬] 9046번 복호화 (0) | 2022.05.13 |
[백준/파이썬] 1965번 상자넣기 (0) | 2022.05.12 |
[백준/파이썬] 20152번 Game Addiction (0) | 2022.05.12 |
[백준/파이썬] 11722번 가장 긴 감소하는 부분 수열 (0) | 2022.05.12 |