프로그래밍/알고리즘

[알고리즘] 알고리즘 문제를 풀 때 알면 좋은것들

riroan 2021. 12. 5. 04:43

알고리즘을 풀며 쌓아온 꿀팁 아닌 꿀팁을 정리하고자 한다.

 

1. (파이썬) 여러개의 변수 입력받기

# 여러개의 변수
a,b,c = map(int, input().split())
# 1 2 3

# 한줄로 입력받는 리스트
arr = list(map(int, input().split()))
# 1 2 3 4 5 6 7 8 9

# 여러줄을 입력받는 리스트
arr = [int(input()) for _ in range(n)]
# 1
# 2
# 3
# 4

# 2차원 배열
arr = [list(map(int, input().split())) for _ in range(n)]
# 1 2 3
# 4 5 6
# 7 8 9

 

2. (파이썬) 배열 초기화

# 1차원 배열
a = [0]*n

# 2차원 배열
a = [[0]*n for _ in range(n)]

# 3차원 배열
a = [[[0]*n for _ in range(n)] for i in range(n)]

 

3. (파이썬) 여러개의 테스트 케이스가 주어지는데 몇개인지 모를 때

try:
	a,b = map(int, input().split())
	# do something
except:
	pass
# 1 2
# 3 4
# 5 6

 

4. (파이썬) 올바른 알고리즘인데 시간초과가 날때 입출력 최적화

import sys
input = sys.stdin.readline
a = input()

많은 입력이 들어올 때 써주면 시간초과가 나는 코드도 통과할 수 있다.

 

5. (파이썬) 각종 라이브러리

from queue import Queue, PriorityQueue # 큐, 우선순위 큐
from decimal import Decimal # 정밀한 소수계산
from bisect import bisect_left, bisect_right # 이분탐색 모듈

 

6. (C++) 여러개의 테스트케이스

int main(){
	// 케이스 개수가 주어질 때
	int T;
	cin>>T;
	while(T--){
		// do something
	}
	// 케이스 개수가 안 주어질 때
	int a,b;
	while(cin>>a>>b){
		// do something
	}
}

 

7.  (C++) 입출력속도 최적화 (4번의 C++버전)

ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);

endl보다 \n을 쓰면 속도가 빨라진다!

 

8. (파이썬) 리스트 출력

a = [1,2,3]
print(a)
# [1, 2, 3]

print(' ', end=' ')
# 1 2 3   # 3 뒤에 공백있음

print(*a)
# 1 2 3

9. (C++)숫자를 2진수로 바꿨을 때 자릿수 구하기

int n=0, x=0;
cin>>x;
for(n=1;x>>n;n++);

 

나는 보통 파이썬으로 ps를 하지만 시간초과가 나거나(추가시간 없음 문제) 특정 STL이 필요한 경우 C++을 사용하기도 한다.

 

유용한 사이트

https://codeforces.com/blog/entry/57282