[Algorithm] 개인적인 주의사항

YUNU·2024년 2월 22일

알고리즘

목록 보기
11/15
post-thumbnail

🤖 Algorithm


문제를 풀 때 자주 실수하거나 주의할 부분들

- 습관적인 전역 변수 선언 X

Test Case가 여러 번 존재하는 경우를 조심하자

백트래킹과 같이 재귀를 타는 경우 vector를 지역변수로 사용 or 전역 + clear()

- TestCase 맞아도 일어나지 말아라

0, 1, 예외 사항 열심히 체크

- 값의 범위를 잘 보자

값을 갱신하여 가다보면 int를 넘어서는 경우 多

int -> MAX : pow(2,32)-1 => 2*10^9 넘으면 X
long -> MAX : pow(2,63)-1
int형의 범위를 넘을 것 같으면 그냥 long long을 쓰자
(혹시 10^18을 넘는 경우에는 long long이 아닌 string으로 계산)

- DFS나 BFS와 같이 visit배열 사용할 때

맨 처음 값에 대한 visit값 true로 바꾸는 것 빼먹지 말자

- vector<vector< int >> 보다 vector< int > arr[]가 훨씬 빠르다

배열의 범위를 보고 뒤의 형태로 만들어 사용하는 것이 시간 복잡도 측면에서 유리

- 조합 문제는 bottom-up 방식이 실수를 줄일 수 있다

top-down 방식으로 문제를 풀 때는 예외처리를 잘 해야한다. (물론 DP는 탑다운)

- 주어진 N의 개수를 잘 보자

세자리 단위라면 이중 for문은 지양

누적합, 투포인터 등등 사용

- 특정 조건 없이 반복 입력받을 때

콘솔에서 ctrl D 입력하면 입력 종료

int input;
while(cin>>input){}

- 공백 포함해서 문자열 입력받기

 char words[100];
 cin.getline(words, 100, '\n');
    
 string words;
 cin.getline(cin,words)

- 소숫점 개수 설정

출력문 전에 아래 코드 입력

cout<<fixed;
cout.precision(소숫점 개수);

- queue와 같은 자료구조에 데이터 push할 때

// 아래와 같이 Q에 push 한다면 water에 입력이 없을 경우 waterQ에는 {0,0}이 들어감
pair<int,int> water

cin >> matrix[i][j];
if(matrix[i][j]=='A')
	water={i,j};

waterQ.push(water)

// cin으로 한 번에 입력하자
cin >> matrix[i][j]
if(matrix[i][j]=='A'
	waterQ.push({i,j});

- 허용 memory가 매우 작다

memory 허용 4mb -> 배열에 값을 저장해서 풀이 NO, 바로 바로 갱신 YES

profile
DDeo99

0개의 댓글