Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- tanstack query
- 리액트 프로젝트
- 내배캠 프로젝트
- 자바스크립트
- Next 팀 프로젝트
- 한글 공부 사이트
- 파이썬 slice
- 파이썬 딕셔너리
- 내일배움캠프 프로젝트
- 파이썬 enumerate
- 타입스크립트
- useEffect
- 파이썬 replace
- 리액트 공식문서
- React Hooks
- REACT
- 리액트 훅
- 파이썬 for in
- 리액트 공식 문서
- 코딩테스트
- 파이썬 반복문
- 내일배움캠프 최종 프로젝트
- typeScript
- JavaScript
- useState
- 내일배움캠프
- 프로그래머스
- 타입스크립트 리액트
- 파이썬 for
- 리액트
Archives
- Today
- Total
sohyeon kim
[Python] 백준 : 질문은 계속돼 32194, 누적합, prefix 본문
728x90
반응형
📝 문제
닝닝이는 예, 아니오로 답할 수 있는 질문을 좋아한다. 닝닝이 한 첫 번째 질문의 답은 "예"였다.
이후, 2번째부터 닝닝이는 다음과 같은 형태의 질문을 계속해서 할 것이다.
- 1 x y : x 번째 질문부터 y 번째 질문의 답이 모두 "예"였습니까?
- 2 x y : x 번째 질문부터 y 번째 질문의 답이 모두 "아니오"였습니까?
닝닝이가 위 질문을 하는 시점에, 당신은 이미 닝닝이가 한 x 번째 질문부터 y 번째 질문에 답한 적이 있다. 닝닝이가 하는 질문에 모두 답하는 프로그램을 작성하시오.
첫째 줄에, 닝닝이가 한 첫 번째 질문을 제외한 질문의 개수 N 이 주어진다. 즉, 닝닝이는 총 N 개의 질문을 했다.
이후 N 개의 줄에, 닝닝이가 한 각 질문이 차례대로 1 x y 또는 2 x y의 형태로 주어진다.
N 개의 줄에 걸쳐, 닝닝이가 한 질문의 답을 순서대로 출력한다. 각각의 답이 "예"라면 Yes 를, "아니오"라면 No 를 출력한다.
🫠 나의 풀이 (시간 초과)
import sys
sys.stdin = open('input.txt', 'r')
# input = sys.stdin.readline
N = int(input())
lst = [1]
for _ in range(N):
q, x, y = map(int, input().split())
if q == 1:
if 0 in lst[x - 1:y]:
print('No')
lst.append(0)
else:
print('Yes')
lst.append(1)
else:
if 1 in lst[x - 1:y]:
print('No')
lst.append(0)
else:
print('Yes')
lst.append(1)
🧞♂️ 다른 사람의 풀이
# input
6
1 1 1
2 1 2
2 2 3
1 1 2
2 3 4
1 5 5
# output
Yes
No
No
Yes
Yes
Yes
import sys
sys.stdin = open('input.txt', 'r')
# input = sys.stdin.readline
N = int(input())
lst = [1] # 각 질문의 답 저장 Yes = 1, No = 0
prefix = [0, 1] # 누적합: prefix[i]는 lst[0:i]의 1의 개수를 의미
for _ in range(N):
q, x, y = map(int, input().split())
if q == 1: # 구간 [x-1, y+1)의 답이 Yes 인가?
cnt = prefix[y] - prefix[x - 1]
if cnt < (y - x + 1): # 구간 내 0이 있음
print('No')
lst.append(0)
else: # 구간에 0이 없음
print('Yes')
lst.append(1)
else: # 구간 [x-1, y+1)의 답이 No 인가?
cnt = prefix[y] - prefix[x - 1]
if cnt > 0: # 구간 내 1이 있음
print('No')
lst.append(0)
else: # 구간에 1이 없음
print('Yes')
lst.append(1)
prefix.append(prefix[-1] + lst[-1])
# lst = [1, 1, 0, 0, 1, 1, 1]
# prefix = [0, 1, 2, 2, 2, 3, 4, 5]
🔗 https://www.acmicpc.net/problem/32194
728x90
반응형
'Coding Test' 카테고리의 다른 글
[Python] 백준 : 후보 추천하기 1713, dictionary, pop(), min() (0) | 2025.01.02 |
---|---|
[Python] 코드잇 : 리스트 항목 합 탐색, Brute Force (0) | 2024.12.18 |
[Python] 백준 : 방 번호 1475, dict, list (1) | 2024.12.11 |
[Python] 백준 : 학생 번호 1235, for in, strip() (2) | 2024.12.06 |
[Python] 백준 : 수학은 비대면강의입니다 19532, 브루트 포스, 연립방정식, for (0) | 2024.11.23 |