코딩 테스트 36

[2024년 2월] 백준 다시 풀어볼 문제

1 2563번: 색종이 https://www.acmicpc.net/problem/2563 이 문제는 첨 봤을 때 모든 사각형의 넓이를 구한 후 겹친 부분을 빼서 푸는 건줄 알았다. 근데 더 좋은 풀이가 있었다. 전체 넓이가 크지 않기 때문에 그 전체 넓이에 해당하는 만큼을 배열로 만들어놓고, 사각형에 해당하는 부분을 표시하면 된다. 표시된 부분이 최종 결과가 된다. 2 17299번: 오등큰수 https://www.acmicpc.net/problem/17299 블로그 글들을 보면서 코드를 이해하긴 했는데 도대체 이런 생각은 어떻게 해야하는걸까? 나는 첨에 이 문제를 while 루프를 돌면서 풀었다. 그랬더니 시간초과가 떠서 다른 방법으로 풀어야 하는거구나 까지는 생각을 했다. 근데 스택으로 풀 수 있을거라..

코딩 테스트 2024.02.08

스택과 큐

스택 LIFO: Last-in First-out. 나중에 들어온 데이터가 먼저 나간다. 스택은 DFS: Depth First Search, 백트래킹 문제를 풀 때 사용한다. 후입선출은 재귀 함수 알고리즘 원리와 같다. top: 삽입, 삭제가 일어나는 위치 파이썬 연산(리스트 이용) s.append(data): top 위치에 data를 저장 s.pop(): top 위치에 있는 데이터를 삭제, 확인 s[-1]: top 위치에 있는 데이터 확인 큐 FIFO: First-in First-out. 먼저 들어온 데이터가 먼저 나간다. 삽입과 삭제가 양방향에서 이루어진다. BFS: Breadth First Search에서 사용됨. rear: 큐에서 가장 끝데이터 front: 큐에서 가장 앞 데이터 파이썬 연산(리스트..

코딩 테스트 2023.11.19

구간 합

합 배열(S)을 구하는 것부터 시작한다. S[i] = A[0] + A[1] + ... + A[i-1] + A[i] 인덱스 0 1 2 3 4 5 리스트 A 3 5 2 1 9 6 합 배열 S 3 8 10 11 20 26 ex) S[4] = A[0] + A[1] + A[2] + A[3] + A[4] = 3 + 5 + 2 + 1 + 9 = 20 A[i] ~ A[j] 리스트의 합을 구한다고 하자. - 합 배열(S) 없이 구한다면, 최악의 경우 시간 복잡도가 O(N)이다. - 하지만 위의 합 배열을 사용한다면 O(1)으로 시간 복잡도가 확 줄어든다. 합 배열 S 구하는 공식 S[i] = S[i-1] + A[i] 구간 합 구하는 공식(A[i] ~ A[j] 리스트의 합) S[j] - S[i-1] 예를 들어서 A[1] ..

코딩 테스트 2023.11.18

배열과 리스트

파이썬에서는 리스트가 배열의 특성도 함께 내포하고 있지만, 배열과 리스트는 확실히 다른 자료구조이다. 배열 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조이다. 인덱스를 사용하여 값에 바로 접근할 수 있다. 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다. 값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요하다. 배열의 크기는 선언할 때 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없다. 리스트 값과 포인터를 묶은 '노드'를 포인터로 연결한 자료구조이다. 인덱스가 없으므로 값에 접근하려면 Head 포인터부터 순서대로 접근해야 한다. (접근하는 속도가 느리다.) 포인터로 연결되어 있으므로 데이터를 삽입하거나 삭제하는 연산 속도가 빠르다. ..

코딩 테스트 2023.11.18

시간 복잡도

[Do it! 알고리즘 코딩 테스트] 최근에 백준 문제 푸는거에 재미를 붙였다. 지금 실버1인데 올해 안에 골드 1이 되겠다는 목표로 열심히 풀어보고자 한다. 지금 실력으로는 문제를 보면서 어떤 알고리즘을 써야 하는지 바로 떠올리기가 힘들다. 그래서 알고리즘 공부를 찬찬히 하면서 실력을 기르려고 한다. 이 책을 2주 안에 끝낼 것이다! 시간 복잡도 어떤 알고리즘을 써서 문제를 풀어야 할지를 결정하는데 시간 복잡도가 중요하다. 일반적으로 파이썬은 1초에 2000만~1억 번 연산을 한다. 최악의 경우를 따져봐야 하기 때문에 파이썬이 1초에 2000만 번 연산을 한다고 생각하고 계산하자. 예를 들어 수를 정렬하는 문제가 있다. 시간 제한은 2초이고, 수의 개수 N(1

코딩 테스트 2023.11.17