1. 이상한 입력
파이썬에서 파일 입출력을 위한 open
함수는 파일을 열고, 읽기, 쓰기, 추가 등의 작업을 할 수 있도록 해준다.
기본 사용법
open(filename, mode)
filename
: 열 파일의 이름과 경로mode
: 파일을 여는 모드 (기본값은 ‘r’)
파일 모드
'r'
: 읽기 모드 (파일이 존재하지 않으면 오류 발생)'w'
: 쓰기 모드 (파일이 존재하면 내용 삭제 후 새로 작성)'a'
: 추가 모드 (파일 끝에 내용을 추가)'b'
: 바이너리 모드 (모드에 추가하여 사용, 예:'rb'
,'wb'
)'+'
: 읽기/쓰기 모드 (모드에 추가하여 사용, 예:'r+'
,'w+'
,'a+'
)
예제
파일 읽기
with open('example.txt', 'r') as file:
content = file.read()
print(content)
파일 쓰기
with open('example.txt', 'w') as file:
file.write('Hello, World!')
파일 추가
with open('example.txt', 'a') as file:
file.write('\nThis is an additional line.')
바이너리 파일 읽기
with open('example.bin', 'rb') as file:
binary_content = file.read()
print(binary_content)
파일 읽기/쓰기
with open('example.txt', 'r+') as file:
content = file.read()
file.write('\nAdding more content')
파일이 자동으로 닫히지 않는 경우
file = open('example.txt', 'r')
try:
content = file.read()
print(content)
finally:
file.close()
그런데 open(0)은 표준 입력 버퍼를 가리키게 되어 sys.stdin과 같고, open(1)은 표준 출력을 가리키게 되어 sys.stdout과 비슷하다.
n, *a = open(0).readlines()
print(n)
print(a)
'''입력
3
20 10 14 3 9
19 17 12 8 10
11 9 8 22 33
결과
3
['20 10 14 3 9\n', '19 17 12 8 10\n', '11 9 8 22 33\n']
'''
n, *a = open(0).read()
print(n)
print(a)
'''입력
3
20 10 14 3 9
19 17 12 8 10
11 9 8 22 33
결과
3
['\n', '2', '0', ' ', '1', '0', ' ', '1', '4', ' ', '3', ' ', '9', '\n', '1', '9', ' ', '1', '7', ' ', '1', '2', ' ', '8', ' ', '1', '0', '\n', '1', '1', ' ', '9', ' ', '8', ' ', '2', '2', ' ', '3', '3', '\n']
'''
n, *a = open(0).read().split("\n")
print(n)
print(a)
'''입력
3
20 10 14 3 9
19 17 12 8 10
11 9 8 22 33
결과
3
['20 10 14 3 9', '19 17 12 8 10', '11 9 8 22 33', '']
'''
n, *a = open(0).read().split()
print(n)
print(a)
'''입력
3
20 10 14 3 9
19 17 12 8 10
11 9 8 22 33
결과
3
['20', '10', '14', '3', '9', '19', '17', '12', '8', '10', '11', '9', '8', '22', '33']
'''
n, *a = map(int,open(0).read().split())
print(n)
print(a)
'''입력
3
20 10 14 3 9
19 17 12 8 10
11 9 8 22 33
결과
3
[20, 10, 14, 3, 9, 19, 17, 12, 8, 10, 11, 9, 8, 22, 33]
'''
https://www.acmicpc.net/problem/2783
c,g,n,*info=map(int,open(0).read().split())
minimum = c*1000/g
for i in range(0,n<<1,2):
minimum = min(minimum, info[i]*1000/info[i+1])
open(1,"w").write(f"{minimum:.2f}")
https://www.acmicpc.net/problem/5523
n,*p = map(int,open(0).read().split())
ta, tb = 0, 0
for i in range(0,n<<1,2):
ta += p[i]>p[i+1]
tb += p[i]<p[i+1]
open(1,"w").write(f"{ta} {tb}\n")
https://www.acmicpc.net/problem/12790
n, *raw = map(int, open(0).read().split())
res = []
for i in range(0, n<<3, 8):
h, m, o, d, he, me, oe, de = raw[i:i+8]
hh = max(h + he, 1)
mm = max(m + me, 1)
oo = max(o + oe, 0)
dd = d + de
result = hh + mm + (mm<<2) + ((oo + dd)<<1)
res.append(result)
open(1,"w").write('\n'.join(map(str, res)) + '\n')
https://www.acmicpc.net/problem/10409
n, t, *tasks = map(int,open(0).read().split())
count = 0
total = 0
for i in range(n):
if total + tasks[i] > t:
break
total += tasks[i]
count+=1
print(count)
`for task in tasks:` 로 돌리는 것 보다 인덱스가 빨랐다.
https://www.acmicpc.net/problem/5361
n,*raw = map(int,open(0).read().split())
prices = [350.34, 230.90, 190.55, 125.30, 180.90]
for i in range(0,n*5,5):
print(f"${sum([a * b for a, b in zip(prices, [raw[i],raw[i+1],raw[i+2],raw[i+3],raw[i+4]])]):.2f}")
n,*raw = map(int,open(0).read().split())
prices = [350.34, 230.90, 190.55, 125.30, 180.90]
with open(1,"w") as f:
for i in range(0,n*5,5):
f.write(f"${sum([a * b for a, b in zip(prices, raw[i:i+5])]):.2f}\n")
n,*raw = map(int,open(0).read().split())
prices = [350.34, 230.90, 190.55, 125.30, 180.90]
res = ""
for i in range(0,n*5,5):
res+=f"${sum([a * b for a, b in zip(prices, raw[i:i+8])]):.2f}\n"
open(1,"w").write(res)
pypy와 python3의 최단시간 코드는 다르다.