티스토리 뷰
매번 알고리즘 문제를 풀 때, 필요한 개념을 그때그때 구글에 검색하는 식으로 여태까지 풀었습니다.
그러다 보니 매번 검색하게 되고, 정작 머리에는 하나도 안 남더라고요...
그래서 공부를 해야겠다 마음먹은 와중에 너무 깔끔하게 정리된 블로그 글이 있어서
코딩테스트를 풀 때 참고하고 싶어 필요한 부분만 제 블로그에 정리 글을 쓰게 되었습니다. 문제 시 비공개 처리하겠습니다!
참고한 블로그 글입니다!
https://covenant.tistory.com/141?category=874690
https://covenant.tistory.com/142?category=874690
1. 입력, 출력 방법
(1) 입출력 가속
input(), print()를 쓰다 보면 시간 초과가 나는 경우가 종종 있어서 조금이라도 시간을 단축하기 위해 사용합니다.
import sys
N = int(sys.stdin.readline())
sys.stdout.write(N)
이런 식으로 사용할 수 있고, sys를 쓰는게 귀찮다면
from sys import stdin, stdout
input = stdin.readline
print = stdout.write
N = int(input())
print(N)
이렇게 사용할 수 있습니다.
이때 주의할 점은 문자열을 입력받을 때 뒤에 strip()을 넣어주세요!
안그러면 \n까지 같이 입력받을 수 있습니다.
(2) 2차원 배열 입력받기
테스트 케이스가
3
1 2 3
4 5 6
7 8 9
이런 식으로 되어 2차원 배열을 입력 받아야 한다면
MAP = [list(map(int, input().split())) for _ in range(N)]
(3) 정수와 배열이 같은 줄에 들어오는 경우
테스트 케이스가
3 10 20 30
3 7 5 12
이런식으로 앞에 배열의 개수가 있고 뒤에 배열이 있는 경우는
N, *arr = map(int, input().split())
이렇게 따로 나눌 수 있습니다.
(4) 문자열을 한 글자씩 배열에 저장하는 경우
테스트 케이스가
3
AAAA
ABCA
AAAA
이고, 한 글자씩 배열에 담아서 사용하고 싶을 때 다음과 같은 방법을 사용합니다.
arr = [list(input()) for _ in range(N)]
이렇게 담으면
arr = [['A', 'A', 'A', 'A'] ['A', 'B', 'C', 'A'] ['A', 'A', 'A', 'A']]
다음과 같이 저장됩니다.
2. 진법 계산
(1) 10진수 -> 2, 8, 16진수
bin(42)
# '0b101010'
oct(42)
# '0o52'
hex(42)
# '0x2a'
(2) 2, 8, 16진수 -> 10진수
int('0b111100', 2)
# 60
int('0o74', 8)
# 60
int('0x3c', 16)
# 60
3. 문자열
(1) 문자열 거꾸로 하기
alph = "ABCD"
alph[::-1]
# alph = "DCBA"
결과는 "DCBA"가 됩니다.
(2) 아스키코드 변환
# 문자열 -> 아스키코드
print ord('A')
# 65
# 아스키코드 -> 문자열
print chr(65)
# A
4. 리스트
(1) 리스트 초기화
가로가 N, 세로가 M인 그래프 배열을 초기화할 때 다음과 같이 사용합니다.
N, M = map(int, input().split())
arr = [[0] * N for _ in range(M)]
(2) 리스트 요소를 거꾸로 하기
arr = [1, 2, 3]
arr.reverse()
# arr = [3, 2, 1]
(3) 리스트 내의 특정한 값의 개수
arr = [1, 2, 3]
arr.count(1) # 1
(4) 리스트 정렬
리스트의 요소가 리스트인 경우 lambda를 통해서 우선순위를 결정합니다.
다음은 첫 번째 요소를 기준으로 정렬하고 첫번째 요소가 같을 경우, 두 번째 요소를 기준으로 정렬한다는 의미입니다.
arr.sort() # 오름차순
arr.sort(reverse=True) # 내림차순
arr.sort(key=lambda x:(x[0], x[1]))
5. 삼항 연산자
if 내의 조건이 맞다면 a, 틀리면 b
res = a if a > b else b
6. 리스트 변환 (문자열 변환)
(1) 문자열 -> 리스트
num_str = "1,3,2"
print(num_str.split(','))
# ['1', '3', '12']
split()을 사용하면 , 기준으로 리스트로 변환할 수 있습니다.
(2) 리스트 -> 문자열
num_list = ['1', '3', '2']
','.join(num_list)
# '1,3,2'
join()을 사용하면 , 이 리스트 요소에 배치되는 문자열로 변환할 수 있습니다.
7. 값이 알파벳인지 숫자인지 판별하기
(1) 알파벳 확인
"a".isalpha() # True
"3".isalpha() # False
판별하고 싶은 문자 뒤에 isalpha()를 붙이면, 알파벳일 경우 True, 아닐 경우 False
(2) 숫자 확인
"3".isdigit() # True
"a".isdigit() # False
판별하고 싶은 문자 뒤에 isalpha()를 붙이면, 숫자일 경우 True, 아닐 경우 False
8. 2차원 배열 뒤집기
board = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_board = list(map(list, zip(*board)))
print(new_board)
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
'Algorithm' 카테고리의 다른 글
[파이썬] 프로그래머스 - [1차] 뉴스 클러스터링 (0) | 2022.06.22 |
---|---|
[파이썬] 프로그래머스 - 신고 결과 받기 (0) | 2022.06.22 |
파이썬 n진수 변환 구현하기 (0) | 2022.06.22 |
Python 이진 탐색 템플릿 코드 (0) | 2021.08.24 |
Python 코딩테스트 대비 자료구조 및 기능 정리 (0) | 2021.08.18 |
- Total
- Today
- Yesterday
- URLComponents
- PHImageRequestOptions
- 슈퍼스칼라
- Swift
- PHAsset
- 운영체제
- optional
- 스레드
- RxSwift
- 디프만
- 개발동아리
- isNetworkAccessAllowed
- 멀티프로세스
- ios
- 스냅킷
- Xcode
- returnKey
- webcrawl
- setBackgroundColor
- sharedmemory
- 프로세스간통신
- cs
- 부캠
- WKUIDelegate
- swiftsoup
- OS
- 프로세스
- 쓰레드
- 개발대외활동
- rxcocoa
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |