[BOJ] 백준 1085 직사각형에서 탈출
출처: https://www.acmicpc.net/problem/1085 Approach 직사각형 내부에서 경계선으로 가는 최단거리가 무엇일지 알면 쉽게 구현할 수 있는 문제이다. 좌표 (x, y)가 주어졌을 때 상 / 하 / 좌 / 우 움직여서 그 중 최소 거리를 구하면 된다. 상: h - y 하: y 좌: x 우: w - x C++ #include inline int min(int A, int B) { return A < B ? A : B; } int x, y, w, h, ans; int main(void) { // freopen("input.txt", "r", stdin); scanf("%d %d %d %d", &x, &y, &w, &h); ans = min(min(w - x, x), min(h -..
2021. 8. 25.
[BOJ] 백준 1037 약수
출처: https://www.acmicpc.net/problem/1037 Approach 진짜 약수 의미를 고려하면 쉽게 구현할 수 있다. ex) A = 20 일 때, 20의 약수는 [1, 2, 4, 5, 10, 20] 이다. 이때, 진짜 약수는 [2, 4, 5, 10]인데 → (2 × 10) 혹은 (4 × 5) 여러 약수 조합 중에서 최소값과 최대값에 해당되는 원소로 곱해주면 된다. 주어지는 진짜 약수를 배열에 저장해서 정렬한 뒤, → sort() 이용 첫번째/마지막 원소가 최소값/최대값에 해당된다. 구현할 때, 진짜 약수가 1개인 경우도 주의해야 한다. ex) 9의 진짜약수는 [3] 이기 때문에 최소/최대값이 동일하다. (32비트 부호있는 정수 조건이므로 int 표현이 가능하다.) C++ #inclu..
2021. 8. 24.
[BOJ] 백준 1026 보물
출처: https://www.acmicpc.net/problem/1026 Approach S = (A[0] × B[0]) + ... + (A[N-1] × B[N-1]) A가 배치될 수 있는 모든 경우의 수에 대해 A[i] × B[i] 합(=S)의 최소값을 구하면 되는 문제이다. 문제 조건을 잘 이용하면 A가 재배치 될 수 있는 모든 Case를 탐색할 필요 없다. (조건) A, B 각 원소는 100보다 작은 양수 때문에 A[i] × B[i] 합이 최소가 되려면 어느 한쪽(A)은 작은 순서, 다른 한쪽(B)은 큰 순서로 곱해지면 된다. A = [ 1 , 1 , 1 , 6 , 0 ] → 오름차순 → [ 0 , 1 , 1 , 1 , 6 ] B = [ 2 , 7 , 8 , 3 , 1 ] → 내림차순 → [ 8 ,..
2021. 8. 22.