2024. 2. 25. 22:39ㆍAlgorithm & PS/PS 일지
백준 13 문제.
1. BOJ 31430 : A+B - 투 스텝 - B1
A + B가 최대 2*10^18까지 가능하다.
그런데 'a' = 0, 'b' = 1, ... 이렇게 매핑하면 26진법으로 표현이 되면서도 26^13 이 2*10^18보다 더 크므로 26진법 인코딩을 해주면 된다.
이후에 다음 프로그램 에서는 26진법 표현을 받고 이를 다시 10진법으로 변환하면 된다.
처음으로 푼 투 스텝 문제라서 리뷰해보았다. 투 스텝 문제를 이해하고 입문하기 매우 좋은 문제라 생각한다.
2. BOJ 15651 : N과 M (3) - S3
Backtracking 문제다.
그냥 N^M 가지의 경우의 수를 전부 돌려보면 된다.
다른 N과 M 문제들과 비슷한 문제였다.
3. BOJ 5347 : LCM - S5
Number Theory 문제.
그냥 LCM을 계산해주면 된다. (a*b) / __gcd(a,b);
4. BOJ 1280 : 나무 심기 - P4
Segment Tree 문제.
좌표 x에 대해서 좌표 x보다 작은 좌표들에 심겨진 나무들을 l개 있고, 반대로 좌표 x보다 큰 좌표에 심겨진 나무들이 n-r개가 있다고 하자.
또한 좌표 x보다 작은 좌표에 심겨진 나무들의 좌표들을 x1,x2,...,xl 이라 하고, 좌표 x보다 큰 좌표에 심겨진 나무들의 좌표들을 xr, ... , xn이라고 하자.
그렇다면 좌표 x에 나무를 심으면 cost는 (xr+...+xn - (n-r)*x) + (l * x - (x1+x2+...+xl))로 계산할 수 있다.
따라서 Segment Tree에 [l,r] 범위에 대해서 각각 {나무의 개수, 나무 좌표값들의 합}를 저장하여 관리한다면 쉽게 답을 구할 수 있다.
5. BOJ 1244 : 스위치 켜고 끄기 - S4
Implementation + Simulation 문제.
남학생 쿼리에 대해서는 그냥 O(N)으로 구현해도 상관없다.
여학생 쿼리는 투 포인터로 구현하긴 했지만 N이랑 쿼리 수가 너무 작은 관계로, 그냥 O(N^2)로 구현해도 될 것 같다.
6. BOJ 1024 : 수열의 합 - S2
Math 문제.
연속된 범위의 수들의 개수가 홀수 개수라면 (중앙값) * (개수)가 N과 같으면 그 부분이 가능한거고,
짝수 개수라면 (중앙의 두 값의 합) * (개수/2)가 N과 같으면 그 부분이 가능하다.
따라서, L부터 100까지 모든 길이에 대해서 길이가 홀수면 N을 나눌 수 있는지 확인하고, 짝수면 2*N을 나눌 수 있는지를 확인하면 된다.
가능하다면 그 값들을 중심으로 나머지 수들을 채워나가면 되는데, 이건 또 수식으로 잘 정리하면 된다.
7. BOJ 15900 : 나무 탈출 - S1
BFS 문제.
이게 중간에 트리에서 특정 노드를 골라서 전체를 옮기는 문제면 몰라도...
어차피 한 턴에 말 하나를 부모 노드로 꼭 옮긴다면, 게임은 모든 리프 노드에 대해서 루트까지의 길이의 합만큼의 턴이 지나면 게임이 끝난다.
따라서 BFS를 활용해서 리프 노드 및 거리들을 파악해 이를 더하면 답을 찾을 수 있다.
이외에도 Bronze 6 문제를 풀었다.
이번 주 일지는 여기서 끝.
'Algorithm & PS > PS 일지' 카테고리의 다른 글
2024.03.04. ~ 2024.03.10. (8) | 2024.03.13 |
---|---|
2024.02.26. ~ 2024.03.03. (0) | 2024.03.04 |
2024.02.12. ~ 2024.02.18. (0) | 2024.02.19 |
2024.02.05. ~ 2024.02.11. (0) | 2024.02.11 |
2024.01.29. ~ 2024.02.04. (0) | 2024.02.06 |