BOJ 입출력

다히·2023년 1월 12일
0

BOJ

목록 보기
6/45

BOJ 입출력 문제

2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 
11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 
2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992

풀다가 체크

11718 / 11719 : 그대로 출력하기

  • 왜 .. 11718과 11719는 동일한 코드로 동작하는가 (모르겠음)
  • sys.stdin.readline으로는 안 되는 이유 입출력 글에 작성해둠

11718 코드1 == 11719 코드

while True:
    try: 
        print(input())
    except EOFError: 
        break

11718 코드2

  • 다른 사람 풀이 참고
import sys

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

11720 : 숫자의 합

  • 숫자가 54321 처럼 붙어서 들어올 때

내 코드

import sys
input = sys.stdin.readline

arr = map(int, input().rstrip())
print(sum(arr))
  • str은 그 자체로 iterable이므로 map()에 바로 넣어점
  • map()map object를 반환하는데 바로 sum()이 된 건 신기
  • 원래 의도대로는 list()로 한 번 감쌌어야 하긴 함

11721 : 열 개씩 끊어 출력하기

내 코드

import sys
input = sys.stdin.readline

for idx, ch in enumerate(input().rstrip()):
    print(ch, end='')
    if idx%10 == 9:
        print()

다른 사람 코드

for i in range(0, len(n), 10):
    print(n[i : i + 10])
  • 연구실에서 야무지게 써먹던 enumearte() 집착광공..
  • 다른 사람 코드가 훨배 깔끔하고 ... 나머지 연산도 필요 없고 ..
  • 간결하게 쓰는 법.. 아자아자...!

2742 : 기찍 N

N = int(input())
for i in range(N, 0, -1):
    print(i)
  • 뇌 놓고 range(1, N+1, -1) 이러고 앉아있었다.. ^,^
  • 한 줄로 print('\n'.join(str(c) for c in range(int(input()),0,-1)))

1924 : 2007년

내 코드

1/1일부터 날짜 세주는 get_days 랑 요일 리턴하는 day_of_week 함수 구현해서
day_of_week(get_days(month, day)) 해준 코드였는데

days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30]
m, d = map(int, input().split())
week = "SUN, MON, TUE, WED, THU, FRI, SAT".split(", ")
print(week[(sum(days[:m])+d)%7])

처럼 4줄로 줄일 수 있음

  • 근데 함수로 길게 쓴 게 훨씬 빠르고 ... 시간 적게 걸리긴 했음.. 모르겠다

10818 : 최소, 최대

  • min(), max() 의 시간복잡도 O(N)
  • sort()의 시간복잡도 O(NlogN)

2438 ~ : 별 찍기

  • 머리가 굳어서 별찍기 규칙이 팍팍 안 떠오른다 ㅡㅡ
  • 정확히는 한 방에 계산되는 규칙이 안 떠올라서 짱남
  • 근데 암튼 마저 다 풀었음




문제 번호 참고: plzrun's Algorithm

0개의 댓글