모든 게시물은 macOS Monterey 12.0.1 버전을 기준으로 작성하였습니다.
저서 '이것이 취업을 위한 코딩 테스트다 with 파이썬'을 바탕으로 작성하였습니다.
파이썬 기본 입출력
알고리즘 문제 풀이의 첫 번째 단계는 데이터를 입력받는 것이다.
파이썬에서 데이터를 입력받을 때는 input()을 이용하며 한 줄의 문자열을 입력받도록 해준다.
그리고 여러 개의 데이터를 입력받을 때는 데이터가 공백으로 구분되는 경우가 많아 입력받은 문자열을
띄어쓰기로 구분하여 각각 정수 자료형의 데이터로 저장하는 코드의 사용 빈도가 매우 높다.
list(map(int, input().split()))
-> 먼저 input()으로 입력받은 문자열을 split()을 이용해 공백으로 나눈 리스트로 바꾼 뒤에
map()을 이용하여 해당 리스트의 모든 원소에 int() 함수를 적용한다.
최종적으로 그 결과를 list()로 바꿈으로써 저장된다.
이 코드는 정말 많이 사용되므로, 반드시 외우고 있어야 한다.
줄 바꿈이라면 int(input())을 여러 번 사용하면 되는데,
공백이라면 이렇게 사용해야 하므로 구분해서 알아두자.
또한 문제를 풀다보면, 입력을 받는 속도를 빠르게 해야 하는 경우가 있다.
예를 들어 1,000만 개가 넘는 라인이 입력되는 경우, 입력을 받는 것만으로도 시간 초과가 될 수 있다.
따라서 파이썬에서는 단순히 input() 함수를 그대로 사용하는 것이 아니라
파이썬의 sys 라이브러리에 정의되어 있는 sys.stdin.readline() 함수를 이용한다.
단, 입력 후 엔터가 줄 바꿈 기호로 입력되므로 이 공백 문자를 제거하려면 rstrip() 함수를 사용해야 한다.
※ 코랩으로 실습하며 따라가고 있는데 코랩에서는 sys.stdin.readline() 함수가 작동하지 않는다고 한다.
아쉬운대로 replit을 이용하여 함수를 사용해봤다.
결과의 차이를 보면 rstrip()를 사용하지 않은 결과 엔터가 줄 바꿈 기호로 입력되고,
rstrip()를 사용한 결과 줄 바꿈 기호의 역할이 사라져 그 결과가 모두 붙어 출력된다.
다음은 백준 BOJ 15552번 빠른 A+B 문제다.
이제 파이썬에서의 표준 출력 방법에 대해 알아보자.
print()를 이용하여 출력을 진행하는데 print()는 기본적으로 출력 이후에 줄 바꿈을 수행한다.
줄 바꿈을 원하지 않는다면 'end' 속성을 이용할 수 있다.
파이썬 3.6 이상의 버전부터 f-string 문법을 사용할 수 있는데 f-string 문법이란
문자열 앞에 접두사 'f'를 붙임으로써 자료형의 변환 없이도 간단히 문자열과 정수를 함께 넣을 수 있다.
중괄호 안에 변수를 넣기만 하면 되므로 꽤나 편리한 기능이다.
조건문
파이썬에서 조건문을 작성할 때는 if ~ elif ~ else문을 이용한다.
if 조건문 1:
조건문 1이 True일 때 실행되는 코드
elif 조건문 2:
조건문 1에 해당하지 않고, 조건문 2가 True일 때 실행되는 코드
else:
위의 모든 조건문이 모두 True가 아닐 때 실행되는 코드
이건 늘 궁금했지만 굳이 찾아보지는 않았던 내용인데
파이썬에서 들여쓰기는 스페이스바를 4번 입력하여 작성한다고 한다.
탭을 사용하는 것과 공백문자를 여러 번 사용하는 두 진영의 논쟁이 계속 이어지고 있으나
저자는 코딩 테스트처럼 촉박한 상황이 아니라면 띄어쓰기 4번으로 할 수 있도록 습관을 들이는 것을 추천했다.
조건문을 보다가 앞에서 배운 내용들을 전체적으로 활용할 수 있는 예가 떠올라 코드로 작성했다.
n명의 학생의 성적을 받아 학점을 매기는 문제로 사전 자료형을 활용하면 더 보기 좋은 결과가 나오겠다.
※ 다시 보니 f-string 문법 굳이 쓰지 않고, print(i+1,'번째 학생의 학점은 ~입니다.')해도 됐다 ^,,^
파이썬에서 이용되는 비교 연산자를 표로 정리한 것이다.
또한 파이썬에서는 조건문의 값이 참이더라도, 아무것도 처리하고 싶지 않을 때 Pass 문을 이용할 수 있다.
예를 들어 디버깅하는 과정에서 조건문의 형태만 만들어 놓고 조건문을 처리하는 부분은 비워놓고 싶을 때가 있다.
나아가서 조건문을 간소화하는 방법이 있다.
조건문에서 실행될 소스코드가 한 줄인 경우, 굳이 줄 바꿈을 하지 않고도 간략하게 표현할 수 있고,
조건부 표현식을 활용하면 if ~ else문을 한 줄에 작성할 수도 있다.
반복문
파이썬에서는 while문과 for문이 있는데 어떤 것을 사용해도 상관없다.
하지만 실제 코딩테스트에서는 대부분의 경우 for문이 그 소스코드가 더 짧다고 한다.
만약 1부터 10까지 홀수들만 더하고 싶다면 어떻게 해야 할까?
반복문과 조건문을 함께 이용해야 한다.
다음으로 for 문이 있다. for 문의 구조는 다음과 같은데,
in 뒤에 오는 데이터에 포함되어 있는 모든 원소를 첫 번째 인덱스부터 차례대로 하나씩 방문한다.
in 뒤에 오는 데이터로는 리스트, 튜플, 문자열 등이 사용될 수 있다.
for 문에서 수를 차례대로 나열할 때 range()를 주로 사용한다.
예를 들어 1부터 9까지의 모든 수를 담고자 한다면 range(1, 10)과 같이 작성한다.
또한 range(10)과 같이 하나의 값만 넣으면, 자동으로 시작 값은 0이 된다.
반복문 안에서 continue를 만나면 프로그램의 흐름은 반복문의 처음으로 돌아간다.
다섯 명의 학생의 합격 여부를 가리는데 2번 학생과 4번 학생은 점수에 상관없이 불합격이라고 가정해보자.
이럴 때는 블랙리스트에 해당 번호가 포함된 경우, 해당 학생은 무시하고 다시 다음 번호부터 처리하게 하면 된다.
또한 반복문을 즉시 탈출하고자 할 때, break 문을 사용할 수 있다.
1부터 5까지 정수를 차례대로 출력하는 예를 확인해보자.
더불어 반복문은 중첩해서 사용할 수 있으며, 코딩 테스트에서도 '플로이드 워셜 알고리즘', '다이나믹 프로그래밍' 등의
알고리즘 문제에서 매우 많이 사용된다. 구구단 2단부터 9단까지 모든 결과를 출력하는 소스코드 예시를 확인하자.
함수
프로그래밍을 하다 보면, 똑같은 코드가 반복적으로 사용되어야 할 때가 많다.
이때 함수를 사용하면 소스코드의 길이를 줄일 수 있다.
- 내장 함수 : 파이썬이 기본적으로 제공하는 함수
- 사용자 정의 함수 : 개발자가 직접 정의하여 사용할 수 있는 함수
함수 안에서 함수 밖의 변수 데이터를 변경해야 하는 경우가 있다.
이때는 함수에서 global 키워드를 이용해야 한다. global 키워드로 변수를 지정하면,
해당 함수에서는 지역 변수를 만들지 않고, 함수 바깥에 선언된 변수를 바로 참조하게 된다.
쉽게 말하면 밖에서 정의한 변수 a가 있는데 내가 함수를 만들고 그 함수에 a를 쓰고 싶다면
global a 로 함수 내에서 초기화를 시켜야 한다는 것이다.
또한 파이썬에서 함수는 여러 개의 반환값을 가질 수 있다.
또, 파이썬에서는 람다 표현식을 사용할 수 있다.
특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있다는 장점이 있다.
lambda 뒤에 입력으로 받을 매개변수를 명시하고, 콜론 뒤에 반환값을 기입하면 된다.
이러한 람다 표현식이 효과적으로 사용되는 경우는 어떠한 함수 자체를 입력으로 받는 함수가 존재할 때이다.
또한 함수의 기능이 매우 간단하거나 한번 사용하고 말 경우, 자주 사용된다. 가장 자주 사용되는 형태를 보자.
내장함수 중에서 sorted를 이용하는데 array라는 list를 정렬하되 정렬기준 즉, key 속성으로는 어떠한 함수를 넣어
정렬기준을 명시할 수 있다. 위의 경우, 원소인 튜플이 들어오면 그 두 번째 원소를 기준으로 정렬을 수행한다.
sorted의 key와 같은 정렬기준으로 사용되는 함수는 한번 쓰고 마는 경우가 많으니 lambda를 사용하면 좋다.
또한 lambda 표현식은 여러 개의 리스트에 동일한 규칙을 가지는 하나의 함수를 적용하고자 할 때 유용하다.
map() 함수와 함께 사용되는데 map()은 각각의 원소에 동일한 함수를 적용시킬 때 사용된다.
각각 순서에 맞는 원소끼리 더한 결과를 별도의 리스트에 담고 싶을 때 사용할 수 있겠다.
'Python > 이코테 with 파이썬 정리' 카테고리의 다른 글
[211210] 코딩 테스트를 위한 그리디 알고리즘 ( Greedy Algorithms ) (0) | 2021.12.10 |
---|---|
[211203] 코딩 테스트를 위한 파이썬 표준 라이브러리 (0) | 2021.12.03 |
[211201] 코딩 테스트를 위한 파이썬 문법 1편 (Python Basic) (0) | 2021.12.01 |
[211201] 코딩 테스트, 온라인 저지 사이트, 알고리즘 복잡도 (0) | 2021.12.01 |
[211201] 깃허브(github) 계정 생성 그리고 환경설정 (0) | 2021.12.01 |