파이썬으로 알고리즘 풀기! -입출력편

원종식·2022년 6월 30일
0
post-custom-banner

이 글을 쓰는 이유

원래는 C++로 알고리즘 문제를 주로 풀었었다. 하지만 코딩테스트를 보다보니 C++로 구현하다보니 시간이 좀 많이 걸려서 파이썬으로 문제를 풀게 되었다.
이 포스트는 내가 알고리즘 풀면서 자주 사용하는 문법과 기능을 정리해두는 공간으로 활용하려고 한다.

입출력

입력

기본적인 입출력을 해야 알고리즘 문제를 풀 수 있다. 입력을 받는 함수는 크게 2개이다

import sys
sysGet=sys.stdin.readline()
inputGet=input()

sys.stdin.readline()함수의 경우 sys를 import해서 사용해야한다.
해당 함수의 경우 속도는 빠르지만 줄바꿈 문자까지 읽어버린다. 그래서 보통 해당 함수를 활용 할때는 아래와 같이 rstrip()을 함께 주어 줄바꿈을 제거한다.

n=sys.stdin.readline().rstrip()

rstrip()뿐 아니라 왼쪽 공백 문자를 제거하는 lstrip(), 양쪽 모두 공백을 제거하는 strip()함수도 있다.

하지만 입력은 보통 이렇게 하나 뚝 던져주지 않고
10
1 2 3 4 5 6 7 8 9 10
이런식으로 공백을 주고 제공되기 마련이다. 이런 경우 어떻게 받을 수 있을까?
이때 활용하게 되는 함수가 split()함수이다. 활용 예시를 보자.
입력으로
1 2 3 4 5 6 7 을 주었다

get=input().split(' ')
print(get)

해당 사진에서 보듯 get이라는 변수에 ['1', '2', '3', '4', '5', '6', '7'] 라는 배열 값이 들어가게 되었다.
하지만 이때 각 배열의 값은 우리가 원하는 int형 변수 즉 정수가 아니다. 이때 for문을 통해서 값들을 변경할 수 있다.

get=list(int(x) for x in input().split(' '))
print(get)

출력

기본출력

출력은 보통 위와 같이 print()를 사용한다.
이때 출력형식을 맞추는 방법들에 대해서 서술하고자 한다.

n을 입력 받았을때
"1입니다 2입니다 ... n입니다"
를 출력해야 한다면 어떨까?
정답은 아래와 같다.

n=int(input())
for i in range(1,n+1):
    print(f"{i}입니다",end=" ")


위의 함수에서 주목할 부분은 f""의 부분과 end=" "의 부분이다
기본적으로 print()의 경우 마지막에 자동적으로 개행(줄바꿈) 된다.
하지만 end=을 사용하게 될 경우 ""안에 들어간 문자로 \n이 치환된다고 보면 된다.
f""의 경우 기본적으로 문자를 출력하지만 가운데 {}안에는 변수 혹은 값을 넣어 줄 수 있다. c 에서 %d %s를 사용해두고 나중에 변수를 매개변수로 준 것을 바로 넣어서 사용한다고 보면 된다.

소수출력

우리가 문제를 풀다보면 소수 몇번째 자리까지 출력하시오 와 같은 무제들을 접하게 된다. 이때 활용할 수 있는 출력 방법이 있다.

1. 기본 소수출력 : %.nf

n번째 자릿수까지 반올림한 값을 출력하고 싶다면 %.nf 형태로 출력 형식을 지정해주면 된다. 이때 실제 값보다 더 많은 숫자를 지정하면 남은 공간은 0을 채우게 된다.

n=1.23456
print("소수 1번째 자리까지 %.1f"%n)
print("소수 2번째 자리까지 %.2f"%n)
print("소수 3번째 자리까지 %.3f"%n)
print("소수 4번째 자리까지 %.4f"%n)
print("소수 5번째 자리까지 %.5f"%n)
print("소수 6번째 자리까지 %.6f"%n)

2. 자리수 지정 공백채움 소수출력 : %m.nf

m자리에 맞춰 n자리의 소수를 출력하고 나머지는 공백으로 채우는 방법이다.
이때 .도 자리를 차지하게 된다

n=1.23456
print("10자리에 소수 1번째 자리까지 %10.1f"%n)
print("10자리에 소수 2번째 자리까지 %10.2f"%n)
print("10자리에 소수 3번째 자리까지 %10.3f"%n)
print("10자리에 소수 4번째 자리까지 %10.4f"%n)
print("10자리에 소수 5번째 자리까지 %10.5f"%n)
print("10자리에 소수 6번째 자리까지 %10.6f"%n)

3. 0채움 자리수 지정 소수출력 : %0m.nf

위와 비슷하나 공백 대신 0을 채우는 방식이다.

n=1.23456
print("10자리에 0채워서 소수 1번째 자리까지 %010.1f"%n)
print("10자리에 0채워서 소수 2번째 자리까지 %010.2f"%n)
print("10자리에 0채워서 소수 3번째 자리까지 %010.3f"%n)
print("10자리에 0채워서 소수 4번째 자리까지 %010.4f"%n)
print("10자리에 0채워서 소수 5번째 자리까지 %010.5f"%n)
print("10자리에 0채워서 소수 6번째 자리까지 %010.6f"%n)

이로서 기본적인 입출력은 끝났다. 이를 다양하게 활용해 알고리즘 문제들을 풀어보자.

profile
여행을 좋아하고 술을 좋아하는 주행가 종시기의 개발 공간
post-custom-banner

0개의 댓글