Dino Rudy
[백준] Python-input.txt로 입력 받기! -공룡 루디 본문
백준 온라인 저지란?
Baekjoon Online Judge는 2010년 3월 19일부터 운영을 시작한 온라인 저지입니다.
2021년 07월 16일 현재 전체 문제 21264개, 채점 가능한 문제 19838개, 풀린 문제 16508개가 있습니다
또한 채점 가능한 프로그래밍 언어는 총 75가지로 많은 사람들이 알고리즘 공부나 코딩 테스트를 준비할 때
많이 애용하는 사이트입니다!
백준 알고리즘 문제 풀 때 input.txt에서 입력을 받아보자!
본론으로 파이썬으로 백준 알고리즘 문제를 풀때 input.txt에서 입력을 받는 방법에 대해 소개드리겠습니다.
문제 19598번-최소 회의실 개수
https://www.acmicpc.net/problem/19598
19598번: 최소 회의실 개수
2개 회의실로 3개 회의를 모두 진행할 수 있다. 예를 들어, 첫번째 회의실에서 첫번째 회의를 진행하고 두번째 회의실에서 두번째 회의와 세번째 회의를 진행하면 된다. 1개 회의실로 3개 회의
www.acmicpc.net
일반적인 방법으로 백준에서 입력 예시를 받는 방법은
아래 코드처럼 input()이라는 함수를 사용합니다.
이런 방식은 VScode나 기타 IDE를 활용하여 run을 시킨 후 예제 입력을 복사하여
사용자가 붙여 넣기 방식으로 터미널에 예제 입력을 입력을 해야 합니다.
이런 방식은 한두 번 run 할 거면 불편하지 않지만
여러 번 run 할 경우 붙여 넣기를 반복해야 하고,
다른 게 복사되어 있을 때는 다시 홈페이지에 가서 복사 후 붙여 넣기 해야 하는 번거로움이 있습니다.
위의 예제 입력 1을 입력받는 일반적인 코드는 다음과 같습니다.
1번 코드
n=int(input()) #n값을 입력받고
for i in range (n):
start, end=map(int,input().split()) #한줄에 2개의 정수를 입력받는방식
하지만 위와 같은 코드를 아래와 같이 바꾸면 값을 input.txt 파일에서 읽어오기 때문에 더 편합니다.
2번 코드
from sys import stdin as s
s=open("input.txt","rt") #절대 경로도 되고, 상대 경로도 된다.
# r read t text
n=int(s.readline().strip())
for i in range(n):
start,end=map(int,s.readline().split())
위와 같이 2번 코드처럼 작성하면 input.txt에 예제 입력값을 한번 저장해 놓으면 run 할 때마다 값을
입력해주지 않아도 돼서 번거로움을 줄일 수 있습니다.
마지막으로 중요한 점은 소스코드를 제출할 때
s=open("input.txt", "rt") 부분을 주석처리를 꼭 해야지 성공적으로 채점이 됩니다.
추가적인 장점으로 2번 코드는 sys.stdin.readline()함수를 사용하기 때문에 input() 함수에 비해
입력값을 읽어 들이는 속도가 더 빠릅니다.
마지막으로 예시문제를 푼 코드를 올리고 마치겠습니다.
# https://www.acmicpc.net/problem/19598
# 최소 회의실 개수
from sys import stdin as s
import heapq as hq
# s=open("input.txt","rt")
N=int(s.readline().strip())
meetings=[] # N개의 회의
rooms=[] # 최대 N개의 회의실
cnt=1 # 회의실 1개 부터 시작
hq.heappush(rooms,(0)) # 기존 회의실에 진행중인게 없음으로 0을 넣어둠
for i in range(N): # N개의 회의를 최소힙에 넣음
start,end=map(int,s.readline().split())
hq.heappush(meetings,(start,end))
# N개의 회의를 하나씩 빼면서 진행중인 회의중에
# 가장 빨리 끝나는 회의를 찾아 교대 할지 새로 추가할지 판단.
while meetings:
start,end=hq.heappop(meetings)
earliest=hq.heappop(rooms)
if start>=earliest:
hq.heappush(rooms,end)
else:
cnt+=1
hq.heappush(rooms,earliest)
hq.heappush(rooms,end)
print(cnt)
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 배열 돌리기 1_16926번 - 공룡 루디 (0) | 2021.08.14 |
---|---|
[백준] 캐슬 디펜스_17135 - 공룡 루디 (0) | 2021.08.13 |
[백준] 치킨 배달_15686번 - 공룡 루디 (0) | 2021.08.13 |
[백준] 연산자 끼워넣기_14888번 - 공룡 루디 (0) | 2021.08.10 |
[백준] Java-input.txt로 값 입력 받기 - 공룡 루디 (1) | 2021.07.16 |