[python 기초] 백준: for문(2741, 2742,10871) /입출력,range(),리스트내포

EMMA·2022년 2월 12일
0

[python] 백준 시리즈

목록 보기
1/14
post-thumbnail

백준: for문 풀이를 통해 배운 개념을 보충해 보았다.

나도 코딩 영상을 통해 파이썬의 기초 문법을 한번 훑었으나, 역시 직접 해봐야 내가 부족한 점이 더 잘 보인다 (분명 다 이해했다고 생각했는데 막상 하려니 실수 투성이...). 백준에서 제공하는 문제들은 기초를 다지는데 좋은 사이트인 것 같다.

사칙연산, if문을 거쳐서 for문을 풀었고 그 중 정리가 필요한 문제 및 내용을 적었다.


📌In a nutshell...

  1. input(), sys.stdin.readline()
  2. range()의 다양한 사용 방식
  3. 리스트 내포 (list comprehension) 써먹기

#2741번
입력값을 받아, 1부터 입력값까지 차례대로 출력하기.
sys.stdin.readline()함수를 처음 배웠으며, input()보다 빠르며(sys모듈이 런타임 환경을 직접 제어하는 모듈이라 그런 것 같다), 마지막에 개행문자 \n까지 포함하기 때문에 rtrip()을 추가하는 것이 좋다. 또한 정수형으로 받으려면 int를 추가해야 한다.

import sys
N = sys.stdin.readline()	#입력값 N을 받아서
for i in range(int(N)):		#N을 정수형으로 바꾼 후, 1부터 N까지 출력
    print(i+1)

#2742번
입력값 받아, 입력값 > 1순서로 출력하기.
처음에는 reverse() 를 떠올리기 쉬운데 이는 list 내 값을 그대로 뒤집는 것 뿐이지 내림차순 시켜주는 것은 아니다. 그리고 지금 이 문제에서는 입력값을 받아서 -1씩 출력하는 것이기 때문에 적합하지 않다. 아래와 같이 짜면 된다.

N = int(input()) 
for i in range(N):	#range(N): range(0,4)
    print(N)		#N을 먼저 출력 
    N -= 1 			#N에서 1을 뺌 

우선 나는 range()를 한번도 stop값만 입력하는 방식을 사용한 적 없다가, 이 문제를 통해 range()에 다양한 입력방식이 있다는 것을 알게 되었다.

  • range(stop): 0~stop값에서 1을 뺀 위치까지
  • range(start,stop):start~stop값에서 1을 뺀 위치까지
  • range(start,stop,step): start에서 시작하되 step값만큼 구간을 건너뛰며 이동

그래서 range(start,stop,step)을 사용하면 더 간결해진다.

for i in range(int(input()),0,-1):	#입력값에서 0까지 -1씩 이동
    print(i)

#10871번
5 4 이라고 입력 후, 1 3 5 2 4 라고 입력하면 3보다 더 작은 수를 순서대로 출력하라는 문제다 (결과: 1 3 2).

N,X = map(int,input().split())
lst = list(map(int, input().split()))	#두 번째 입력값들은 list 형태로 반환한다 

for i in range(N): 	#N: 0~(N-1)까지 i에 대입
    if lst[i] < X:
        print(lst[i], end=" ")

만약 두 번째 줄 입력변수 lst를 list 형태로 만들지 않으면, 순서대로 하나씩 갖고 올 수 없다. 인덱싱을 하려면 list 형태로 만들어줘야 한다.

여기서 가변인자와 리스트 내포(list comprehension)을 사용하면 더 간결해진다. 리스트 내포는 [표현식 for 항목 in 반복가능객체 [if 조건문]] 의 구조로 사용한다.

N,X = map(int,input().split())
lst = [*map(int,input().split())]
print(*[n for n in lst if n < X])



내용 출처: 백준

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글