목차
구구단 (#2739)
- Hint
문제 내 출력창에 있는 형식 (spacebar) 에 주의
- Solution
a=int(input())
for i in range(1,10):
print(f'{a} * {i} = {a*i}')
A+B - 3 (#10950)
- Hint
입출력을 하나의 반복문에 넣기는 어렵다고 판단하여 리스트를 사용하였다.
출력 조건을 충족 시키려고
print(*리스트변수명 , sep='\n')
위와 같이 표현하였다.
- Solution
count = int(input())
result = []
for i in range(count):
a, b= map(int ,input().split())
result.append(a+b)
print(*result, sep='\n')
합 (#8393)
- Hint
range(a) : 반복문을 a 번 반복
for i range(n)
에서의 i는 초기값이 0이므로 i를 합 인자로 사용하려면
for i range(n+1)
로 반복 횟수를 1회 증가시켜줘야 0, 1, 2 . . . (n) ,(n+1) 번 더해진다.
연속된 자연수의 합공식을 알고 있다면 더 간단히 해결 가능하다.
- Solution
반복문 이용한 풀이
a=int(input())
result=0
for i in range(a+1):
result += i
print(result)
자연수 합공식 이용한 풀이
a=int(input())
print(a(a+1)//2)
영수증 (#25304)
- Hint
total과 계산된 total (caltotal)을 비교해서 출력을 하게 하는 코드를 짜보았다.
- Solution
total=int(input())
n=int(input())
caltotal=0
for i in range(n):
price, ea = map(int,input().split())
caltotal+=price*ea
if total==caltotal:
print('Yes')
else:
print('No')
빠른 A+B (#15552)
- Hint
sys.stdin.readline()
sys.stdin.readline()
정의 ; Definition sys Python의 인터프리터; Interpreter - 코드를 한줄씩 읽어가며 실행되는 프로그램 에서 제공되는 모듈 중 하나 따라서 이 입력 방법을 사용시에 맨 위에 import sys 를 해주어야 한다.
2022.07.24 - [Python] - sys.stdin.readline()
- Solution
반복문 이용한 풀이
import sys
n=int(input())
result = []
for i in range(n):
result.append(sum(map(int, sys.stdin.readline().split())))
print(*result, sep="\n")
open() 함수를 이용한 풀이 - open(0) stdin 상태
왜 open(0)에서 0은 뭐고 이것을 stdin 상태라고 부르는것일까?
import sys
for n in [*open(0)][1:]:
print(sum(map(int,n.split())))
open(0)
맨 앞의 테스트케이스 T와 그 뒤의 int 쌍을 저장한다.
[*리스트명]
A+B-3 hint 란에 기술
[1: ]
리스트의 첫 번째 이후로 부터의 값을 도출한다. (2번째 ~ )
n (0부터 시작) 번째 open 에 기록된 라인부터 차례대로 출력한다.
반복문을 이용한 풀이와는 다르게 print가 반복되면서 줄바꿈이 시행된다.
N 찍기 (#2741)
- Solution
반복문 이용한 풀이
n = int(input())
for i in range(n):
print(i+1)
range 함수 이용하여 바로 출력하기
print(*range(1,int(input())+1))
range(1, n)
1부터 n까지의 리스트를 생성
기찍 N (#2742)
- Solution
반복문 이용한 풀이
n = int(input())
for i in range(n):
print(n-i)
A+B -7 (#11021)
- Hint
빠른 A+B 의 Solution 참고
- Solution
readline() 이용한 풀이
import sys
n = int(input())
result=[]
for n in range(n):
result.append(sum(map(int, sys.stdin.readline().split())))
for i in range(len(result)):
print(f'Case #{i+1}: {result[i]}')
result 리스트를 생성하여 출력부에서 원하는 두 수의 합을 저장하여 출력을 하는 방식이다.
open() 이용한 풀이
i=0
for a,_,b,_ in [*open(0)][1:]:
i+=1
print(f'Case #{i}:',int(a)+int(b))
open(0)를 통하여 입력을 받고 [1:] 첫째항을 제외한 다음 항부터 입력을 한다.
첫째항(n)이 없어도 n번 만큼 반복이 가능하게 되는 이유는 받아온 입력을 for a,_,b_ 을 통하여
첫째 인수(a), 공백(_), 다음 인수(b), 줄바꿈(\n) 을 한 세트로 받아오기 때문이다.
터미널에서는 왜 실행이 되지 않을까?
A+B -8 (#11022)
- Hint
빠른 A+B 의 Solution 참고
- Solution
readline() 이용한 풀이
import sys
n = int(input())
result = []
for i in range(n):
a,b = map(int, sys.stdin.readline().split())
result.append([a,b,a+b])
for i in range(len(result)):
print(f'Case #{i+1}: {result[i][0]} + {result[i][1]} = {result[i][2]}')
위의 문제와 비슷하지만 result 리스트 내에 리스트를 하나 더 만들어 a, b, a+b 값을 각각 저장하여 리스트 내 리스트를 구현하여 출력하였다.
open() 이용한 풀이
i=0
for a,_,b,_ in [*open(0)][1:]:
i+=1
print(f'Case #{i}:',a,'+',b,'=',int(a)+int(b))
위 문제의 풀이를 아주 조금만 변경하면 쉽게 해결된다.
별찍기 (#2438)
- Hint
반복문을 이용하면서 루프 반복시에 증가하는 값을 이용해보기
- Solution
반복문 두번 사용하기
for i in range(int(input())):
for n in range(i):
print('*', end='')
print('*')
print() 함수 내 출력 str 을 i 곱하여 나타내기
for i in range(int(input())):
print('*'*(i+1))
숏코딩
for i in range(int(input())):print('*'*-~i)
어케했누
별찍기 -2 (#2439)
- Hint
반복문을 이용하면서 루프 반복시에 증가하는 값을 이용해보기
출력시에 공백 개수에 유의하기
- Solution
반복문 두번 사용하기
n = int(input())
for i in range(n):
for s in range(n-i-1):
print(' ', end='')
print('*'*(i+1))
숏코딩
N=i=int(input())
while 0<i:
i-=1
print(" "*i+"*"*(N-i))
위 의 N과 i를 동시에 받아서 하나의 인자만 변화시키는 테크닉은 유용하게 쓰일것 같다.
X보다 작은 수 (#10871)
- Hint
반복문을 이용하면서 루프 반복시에 증가하는 값을 이용해보기
- Solution
for 문과 조건문을 이용
n,std = map(int, input().split())
num_list=[]
num_list = map(int, input().split())
for i in num_list:
if i<std:
print(i, end=' ')
std(기준값)을 리스트에 저장된 인자들과 비교하여 작은 경우에 출력을 하도록 프로그래밍 하였다.
숏코딩
n,x,*a=map(int,open(0).read().split())
for i in a:
i<x==print(i,end=' ')
open(0) 함수를 이용해 전부 불러온 다음에 앞의 두가지 인수를 제외한 나머지 부분을 a의 리스트 내에 저장하였다.
i<x 로 조건식을 만들고 이 조건식이 맞은 경우에 ? 라기에는
n,x,*a=map(int,open(0).read().split())
for i in a:
i<x!=print(i, end=' ')
이것도 같은 결과가 나온다(?)
A+B -5 (#10952)
- Hint
반복문과 조건문의 동시사용을 어떻게 할지 알아보기
리스트 마지막 인자를 제외하고 출력을 하고싶으면 [:-1] 로 표현하면 된다.
- Solution
while을 이용한 풀이
a=[]
i=0
while i == 0:
result = sum(map(int,input().split()))
i=1
if result != 0:
a.append(result)
i=0
for i in a:
print(i)
i를 스위치 처럼 이용하여 풀었는데... 뭔가 더 간단히 표현이 가능할것 같지만 숏코딩은 open 으로 구현하였다.
open()을 이용한 풀이
for a,_,b,_ in [*open(0)][:-1]:
print(int(a)+int(b))
리스트 슬라이싱을 이용하여 맨 뒤의 0을 제외하여 출력하도록 하였다.
A+B -4 (#10951)
- Hint
EOF : 텍스트 파일의 끝을 만나게 되면 얻을 수 있는 값이다.
터미널 내에선 ctrl + z 를 누르고 엔터키를 누르면 된다. getchar : -1
파이썬에서 EOF 를 선언할 경우에는 내장함수 명령인 sys의 readline 함수나 input 함수의 사용시에 끝까지 읽어들이기 때문에 끝나지 않을때 이용하게 되는데
While 문을 사용하게 될 경우에
while True:
try:
except EOFError:
break
이런 식으로 표현해주면 된다.
- Solution
예외처리를 이용한 EOF 발생을 이용한 풀이
while True:
try:
a, b = map(int, input().split())
print(a+b)
except EOFError:
break
input(), readline()의 경우에는 이런식으로 EOFError 를 조건으로 입력을 끝내고 원하는 다음 작동을 할수 있게 한다.
sys의 라이브러리 readlines을 이용한 풀이
import sys
lines = sys.stdin.readlines()
for line in lines:
a,b = map(int, line.split())
print(a+b)
readlines 를 이용하여 전체 문장을 가져온뒤에 반복문을 통하여 하나의 라인씩을 따로 뽑아내 출력하는 방식이다.
open(0) 와 비슷한 계열이라고 보면 쉽다.
open()을 이용한 풀이
for a,_,b,_ in [*open(0)]:
print(int(a)+int(b))
사실은 터미널에서도 EOFError 가 필요해야 제대로 작동하지만 백준의 채점방식은 입력물을 넣고 입력 완료 ^Z 를 하기 때문에 원래는 open을 사용한 풀이도 EOFError 가 들어가야한다.
숏코딩
for i in open(0):print(sum(b'%a'%i)%24)
항상 상위 숏코딩은 대단한것 같다
더하기 싸이클 (#1110)
- Hint
반복문을 이용하면서 루프 반복시에 증가하는 값을 이용해보기
- Solution
while()을 이용한 풀이
a = int(input())
i=0
count = 0
temp = a
while i==0:
count+=1
unit = temp%10
ten = temp//10
tempr = (unit+ten)%10
temp = unit*10 + tempr
if a==temp:
i=1
print(count)
마찬가지로 i를 스위치처럼 이용하여 지정된 조건이 만족시에i 의 값이 바뀌면서 반복을 종료하고 반복구문 내에 있던 count 값을 출력하도록 설계하였다.
'Baekjoon > Stepbystep' 카테고리의 다른 글
[백준/python] 문자열 전체 풀이(6단계) (0) | 2022.07.31 |
---|---|
[백준/python] 함수 전체 풀이(5단계) (0) | 2022.07.29 |
[백준/python] 1차원 배열 전체 풀이(4단계) (0) | 2022.07.29 |
[백준/python] 조건문 전체 풀이(2단계) (0) | 2022.07.29 |
[백준/python] 입출력과 사칙연산 전체 풀이(1단계) (2) | 2022.07.29 |