친구와 같이 시작하기 전 내가 아는 내용들을 다 뽑아서 정리해서 알려주려 한다
그런데 막상 적고 나니 이걸 블로그에도 적어두면 나중에 나에게도 도움이 되는 것이 아닌가라는 생각에
이렇게 글로 남겨본다
이 글은 철저히 백준 문제를 위한 입출력 등을 다룬다..
사실 이 범위 밖은 나도 잘 모르기 때문에 쓴 내용이
틀린 경우도 있을 것이니 맹신하지 말고
꼭 자기 자신이 검색하는 습관을 가져보자
-
가장 먼저 백준을 하면서, 가장 많이 백준에서 마주하는 문제는
문제에 있는 테스트 케이스들을 어떻게 입력시킬 것이냐는 것이다
처음에 나는 문제를 푸는 것보다는 이 입출력하는 부분이 더 어려웠다
고로 많이 쓰는 입출력을 나열해보자 한다
1. input()
말 그대로 input()이다
이 명령어는 테스트 케이스의 한 줄을 그대로 가져온다
예를 들어서 테스트 케이스가
I'm so happy
I'm so funny
라 가정했을 때
print(input())으로 얻을 수 있는 결과물은
그대로 I'm so happy다
또 한 번 print(input())을 사용할 경우 얻는 결과물은
I'm so funny 일 것이다
I'm so happy I'm so funny |
print(input()) print(input()) |
결괏값
>
I'm so happy
I'm so funny
2. int(input())
이번에는 정수형을 선언하는 int를 가진 input()이다
input()에 int를 씌울 경우 숫자밖에 읽지 못한다
띄어쓰기, 문자열을 읽으려 하면 바로 디버그 단계에서 오류가 난다
보통 이 경우는 숫자 하나를 변수에 담을 때 쓴다
45 | a = int(input()) print(a) |
결괏값
>
45
3. .split()
split함수는 괄호 안의 값을 기준으로 앞에 붙은 변수의 값을 가져온다
또한 괄호 안에 아무런 값이 없는 경우, 띄어쓰기, TAB, 줄 바꿈을 자동으로 인식하여 다음 값을 받아준다
또한 값을 받은 만큼 변수도 선언해 주어야 오류가 나지 않는다
48 45 35 7 | a, b, c, d = input().split() print (d, c, b, a) |
결괏값
>
7 35 45 48
여기까지
정해진 함수에 정해진 값을 넣는 방법이라 생각하면 될 것 같다
또한 값을 문자열 기준으로 한 변수에 넣고 싶은 경우에도
똑같이 input().split()을 사용하면 된다
가 나 다 라 | ary = input().split() print(ary) |
결괏값
>
['가', '나', '다', '라']
근데 여기서 의문점이 생긴다
만약 내가 ary에 int형으로 담고 싶은데..라고 생각하는 경우 말이다
그럴 경우 약간 다르게 넣어줘야 한다
물론 변수를 하나 부를 때마다 int를 씌워주는 방법이 있으나
그러면 변수가 하나 나올 때마다 씌워주거나 따로 변수명을 줘야 하기에 귀찮아진다
고로 우리는 map 함수를 이용한다
예시를 보자
4 5 8 7 | ary = list(map(int, input().split())) |
결괏값
>
[4, 5, 8, 7]
그럼 여기서 의문이 또 들 수 있다
그냥 ary = input().split() 하면 숫자도 똑같이 들어가는 거 아닌가?
그렇다 숫자는 들어간다
단 그 숫자는 int형이 아니라 계산을 하려고 하면 int로 바꿔줘야 한다
고로 우린 map함수를 이용하여 들어오는 input값을 map으로 변환해 list로 만들어 ary에 넣어주는 것이다
이걸 응용하면
변수 두 개가 정해지고
input값이 숫자 2개가 나왔을 때
한 줄로 변수 두 개에 int형으로 값을 넣을 수 있다
48 54 | a, b = map(int,input().split()) print(a+b) |
결괏값
>
102
만약 map을 쓰지 않고 그저 input().split()을 사용해서 a+b를 했을 경우
결괏값은
4854가 나왔을 것이다
map을 쓰지 않고 102를 만들려면 또한
a+b를 int(a)+int(b)를 써줘야 하는 번거로움이 생긴다
고로 map 함수를 쓰는 것을 추천한다
여기에 나열된 input을 사용하면 거의 모든 문제의 input을 커버할 수 있을 것이다
또한 가끔 입력에서 시간 초과가 나오는 경우가 있는데 이럴 경우를 대비하여
추가로 sys.stdin.readline()에 대해서 알아보자
먼저 맨 윗줄에 import sys를 사용해주자
그리고 input() 대신에 sys.stdin.readline()을 사용해주자
이 sys.stdin.readline()이 무슨 함수인가?
기본적으로 파이썬의 input은 /n값을 없애서 바로 출력해준다
하지만 sys.stdin.readline() 은 그런 거 없이 그냥 냅다
받은 값들을 그대로 출력한다
input()이 2번 처리할 동안
sys.stdin.readline()은 1번에 그냥 다 읽어버린다는 것이다
중간중간 풀다가 이 라인이 필요한 경우가 생길 텐데 꼭 참고해서 쓰길 바란다
'프로그래밍 > 파이썬' 카테고리의 다른 글
[파이썬] [알고리즘] 반복문 (0) | 2022.03.08 |
---|---|
[파이썬] [알고리즘] 출력에 대하여 (0) | 2022.03.06 |
[파이썬] vscode 에서 input.txt output.txt 로 입력값 결과값 넣기 (0) | 2022.03.04 |
[파이썬] 1300 K번째 수 feat.. 넘모 어려워 (0) | 2022.02.12 |
[파이썬] 11054 가장 긴 바이토닉 부분 수열 (0) | 2022.02.11 |