입출력

Sawol·2021년 3월 22일
0
post-thumbnail

❗️ 계속해서 업데이트 될 예정...

잘못된 부분이 있다면 알려주세요 🙏

입출력 풀이

문제 2557

✏️ 내가 작성한 코드

print("Hello World!")

문제 1000

✏️ 내가 작성한 코드

a, b = map(int, input().split(' '))
print(a+b)

💡 흥미로운 코드

print(sum(map(int,input().split())))

split에서 sep(구분자)를 지정하지 않을 경우, 공백 기준으로 분리된다.
연속된 공백 문자 또한, 하나의 공백의 구분자로 사용된다.
Reference


문제 2558

✏️ 내가 작성한 코드

a, b = int(input()), int(input())
print(a+b)

💡 흥미로운 코드

print(int(input())+int(input()))

문제 10950

✏️ 내가 작성한 코드

cnt = int(input())
for _ in range(cnt):
    print(sum(map(int,input().split())))

문제 10951

✏️ 내가 작성한 코드

while 1:
    try:
        print(sum(map(int,input().split())))
    except:
        break

while 에서 0이 아닌 숫자는 모두 True로 인식한다.
내용이 있는 문자열 또한, 모두 True로 인식한다.
Reference


문제 10952

✏️ 내가 작성한 코드

while 1:
    value = input()
    if value == '0 0':
        break
    print(sum(map(int,value.split())))

💡 흥미로운 코드

import sys
while True:
	a,b = map(int,sys.stdin.readline().split())
	if a==b==0: break
	print(a+b)

input VS sys.stdin.readline
똑같은 기능을 가진 것 같지만 어떤 작업을 하는가에 따라 실행 속도가 차이가 난다.
일반적으로 대량의 데이터를 읽을 때 input 보단 sys.stdin.readline 이 훨씬 빠르다.

차이가 나는 이유
input의 경우 프롬프트에 메세지를 띄울 수 있는 기능이 있다.
기본값을 설정해 프롬프트가 비어 있어도 약간의 오버헤드가 생긴다.
또한 input은 자동으로 입력 값의 끝에 있는 개행을 제거한다.
하지만 개행을 제거하기 위해 input을 사용하는 것보다 sys.stdin.readline().strip()을 사용하는 것이 훨씬 더 빠르다.
Reference1 Reference2


문제 10953

✏️ 내가 작성한 코드

import sys

input()
for line in sys.stdin:
    print(sum(map(int,line.split(','))))

문제 11021

✏️ 내가 작성한 코드

import sys

input()
i = 1
for line in sys.stdin:
    print('Case #{0}:'.format(str(i)), sum(map(int,line.split())))
    i += 1

💡 흥미로운 코드

import sys

input()
i = 1
for line in sys.stdin:
    value = sum(map(int,line.split()))
    print(f'Case #{i}: {value}')
    i += 1

문자열 포맷팅
f-string을 사용하자!
str.format을 사용해도 문제가 없지만 코드가 장황해져, 직관적으로 어떤 코드인지 파악하기 힘들어 진다.
이러한 점을 해결한 것이 f-string이다.
Reference


문제 11022

✏️ 내가 작성한 코드

import sys

input()
i = 1
for line in sys.stdin:
    a, b = map(int,line.split())
    value = a + b
    print(f'Case #{i}: {a} + {b} = {value}')
    i += 1

💡 흥미로운 코드

import sys

input()
for i,line in enumerate(sys.stdin.readlines()):
    A,B=map(int,line.split())
    print(f"Case #{i+1}: {A} + {B} = {A+B}")

enumerate
enumerate는 '열거하다' 라는 뜻을 가진다.
iterable한 객체를 인덱스와 함께 열거해준다.
Reference


문제 11718

✏️ 내가 작성한 코드

import sys

for line in sys.stdin:
    print(line, end='')

💡 흥미로운 코드

import sys

print(sys.stdin.read())

문제 11719

✏️ 내가 작성한 코드

import sys

print(sys.stdin.read())

문제 11720

✏️ 내가 작성한 코드

import sys

input()
for value in sys.stdin:
  print(sum(map(int, list(value)[:-1])))

💡 흥미로운 코드

import sys

input()
print(sum(map(int, input())))

문제 11721

✏️ 내가 작성한 코드

s = input()
for i in range(0, len(s), 10):
    print(s[i:i+10])

문제 2741

✏️ 내가 작성한 코드

for i in range(1, int(input())+1):
    print(i)

💡 흥미로운 코드

n = range(1,int(input())+1)
print('\n'.join(map(str,n)))

배열을 만들 때 range로도 만들 수 있다.


문제 2742

✏️ 내가 작성한 코드

n = range(int(input()),0,-1)
print('\n'.join(map(str,n)))

💡 흥미로운 코드

print(* reversed(range(1, int(input())+1)))

파이썬의 Asterisk

  • 곱셈 및 거듭제곱 연산
  • 리스트 확장
  • 가변인자 (Variadic Arguments)
  • Unpacking
    Reference1 Reference2

문제 2739

✏️ 내가 작성한 코드

value = int(input())
for i in range(1,10):
    print(f'{value} * {i} = {value*i}')

문제 1924

✏️ 내가 작성한 코드

m, d = map(int, input().split())
week = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
for i in range(1, m):
    if i == 2:
        d += 28
    elif i == 4 or i == 6 or i == 9 or i == 11:
        d += 30
    elif m == 1:
        pass
    else:
        d += 31
        
print(week[d%7-1])

💡 흥미로운 코드

m, d = map(int, input().split())
week = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
for i in range(1, m):
    if i == 2:
        d += 28
    elif i == 4 or i == 6 or i == 9 or i == 11:
        d += 30
    else:
        d += 31
        
print(week[d%7-1])

for _ range(1,1)이면 for문 아래의 코드는 동작 되지 않는다.
즉, 굳이 m=1 때를 고려 안 해도 된다.


문제 8393

✏️ 내가 작성한 코드

print(sum(map(int, range(int(input())+1))))

💡 흥미로운 코드

n = int(input())
print((n**2+n)//2)

1부터 n 까지 합 = n(n+1)/2


문제 10818

✏️ 내가 작성한 코드

input()
nums = list(map(int, input().split()))
print(min(nums), max(nums))

💡 흥미로운 코드

import sys

_, *m = map(int, sys.stdin.read().split())
print(min(m), max(m))

문제 2742번에 애스터리스크를 참고하면 *m에는 N개의 정수 리스트가 담긴다.
그렇기에 따로 list를 만들어 주지 않아도 된다.
또한 _같은 경우, 파이썬에서 사용하지 않는 값에 대한 변수를 지정할 때 사용한다.


문제 2438

✏️ 내가 작성한 코드

for i in range(1, int(input())+1):
    print('*'*i)

문제 2439

✏️ 내가 작성한 코드

cnt = int(input())
for i in range(1, cnt+1):
    print(('*'*i).rjust(cnt))

문제 2440

✏️ 내가 작성한 코드

for i in range(int(input()), 0, -1):
    print('*'*i)

문제 2441

✏️ 내가 작성한 코드

cnt = int(input())
for i in range(cnt, 0, -1):
    print(('*'*i).rjust(cnt))

문제 2442

✏️ 내가 작성한 코드

cnt = int(input())
for i in range(1, cnt+1):
    print((' '*(cnt-i))+'*'*(i*2-1))

문제 2445

✏️ 내가 작성한 코드

cnt = int(input())

def star(a, b):
    s = '*'*a + ' '*(b-a)
    print(s + ''.join(reversed(s)))

for i in range(1, cnt+1):
  star(i,cnt)
  
for t in range(cnt-1, 0, -1):
  star(t,cnt)

문제 2522

✏️ 내가 작성한 코드

cnt = int(input())

for i in range(1, cnt+1):
    print(' '*(cnt-i) + '*'*i)
for i in range(1, cnt+1):
    print(' '*(i) + '*'*(cnt-i))

문제 2446

✏️ 내가 작성한 코드

cnt = int(input())

a = 0
for i in range(cnt*2-1, 0, -2):
  print(' '*a + '*'*i)
  a += 1
  
a = cnt - 2  
for i in range(3, cnt*2, 2):
  print(' '*a + '*'*i)
  a -= 1  

💡 흥미로운 코드

num = int(input())
for n in range(-num+1,num):
	print(' '*(num-abs(n)-1) + '*'*(2*abs(n)+1))

절대값을 이용해 값이 줄어들었다가 늘어나는 형식을 출력할 수 있다.
파이썬에서 절대값은 abs를 사용한다.


문제 10991

✏️ 내가 작성한 코드

cnt = int(input())
for i in range(1, cnt+1):
    print(' '*(cnt-i), end = '')
    for j in range(1, i):
        print('*', end = ' ')
    print('*')

💡 흥미로운 코드

n = int(input())
s = '* '*n
for i in range(n): print(s[:2*i+1].rjust(n+i, ' '))

문제 10992

✏️ 내가 작성한 코드

n = int(input())
for i in range(1, n+1):
    if i == 1:
        print(' '*(n-i) + '*')
    elif i == n:
        print('*'*(n*2-1))
    else:
        print(' '*(n-i) + '*' + ' '*(i*2-3) + '*')

0개의 댓글