본문 바로가기
카테고리 없음

🐨이상한 입력, 이터레이터, 비트연산, 리스트 인덱싱과 슬라이싱

by redcubes 2024. 7. 11.

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의 최단시간 코드는 다르다.