이번 단원에서는 평면 좌표 위에서 도형의 성질을 이용해 최적의 해를 찾는 연습을 했습니다. 파이썬과 C++를 병행하며 각 언어의 특징을 살려 구현해 보았습니다.
1. 직사각형의 넓이와 탈출 (27323번, 1085번)
가장 기초적인 기하학적 사고를 코드로 옮기는 단계입니다.
- 핵심 원리:
- 넓이는 A * B로 간단하지만, C++에서는 결과값이 21억을 넘을 경우 **long long**을 고려해야 함을 배웠습니다.
- 경계선까지의 최단 거리는 현재 위치 (x, y)에서 네 방향의 벽(x, y, w-x, h-y) 중 최솟값을 찾는 것입니다.
- 💡 Key Point: 파이썬의 min()과 C++의 min({a, b, c, d}) 초기화 리스트 활용법 숙달.
2. 비트 연산의 마법: 네 번째 점 (3009번)
직사각형의 성질(각 좌표값이 쌍으로 존재해야 함)을 이용해 사라진 점을 찾는 문제입니다.
- 핵심 로직: 세 점의 좌표 중 홀수 번(1번) 등장한 좌표가 네 번째 점의 좌표입니다.
- 최적화 기법:
- 파이썬: list.count()를 사용해 개수 판별.
- C++ (XOR 연산): A oplus A = 0 성질을 이용해 O(1) 공간 복잡도로 해결. 정보보안 전공자로서 비트 연산의 효율성을 실감한 문제였습니다.
3. 수학은 체육과목입니다 & 대지 (15894번, 9063번)
규칙 찾기와 대량의 데이터 처리 연습입니다.
- 수학은 체육과목: 계단식 도형의 둘레가 결국 4n임을 도출. 10억 단위 입력에 대응하기 위해 C++에서 long long 자료형 사용의 중요성을 깨달음(Integer Overflow 방어).
- 대지: N개의 점을 모두 포함하는 최소 직사각형 구하기.
- 성능 최적화: 모든 좌표를 리스트에 담지 않고, 입력을 받으면서 즉시 min/max를 갱신하여 메모리 사용량을 O(1)로 최적화함.
4. 삼각형 외우기 & 세 막대 (10101번, 5073번, 14215번)
조건문의 우선순위와 삼각형 성립 조건을 다루는 기하 단원의 하이라이트입니다.
- 삼각형 성립 조건: 가장 긴 변의 길이 < 나머지 두 변의 합.
- 이 조건을 만족하지 못할 때, 가장 긴 변을 (나머지 두 변의 합) - 1로 조정하여 최대 둘레를 구함.
- 파이썬의 강점: set(nlist)를 이용해 중복된 변/각의 개수를 단숨에 파악하는 파이썬의 편의성 활용.
- C++의 정교함: if-else if-else 구조를 통해 논리적 배타성을 가진 조건 분기를 설계함.
🏁 단원 졸업 소감 (Self-Feedback)
- 자료형의 중요성: 알고리즘 자체보다 데이터를 담는 그릇(int vs long long)의 크기가 정답을 결정짓는 핵심 변수가 될 수 있음을 확인했습니다.
- 수학적 통찰: 복잡한 반복문보다 수식 한 줄(4n, 2 * {temp} - 1)이 코드의 성능과 가독성을 결정합니다.
- 정보처리기사 대비: 2026년 4월 시험에 단골로 나오는 다중 조건문과 산술 연산의 우선순위를 완벽히 정리했습니다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [C/Python] 브루트포스 (0) | 2026.03.12 |
|---|---|
| [C/Python] 시간 복잡도 (0) | 2026.03.08 |
| [C/Python] 약수, 배수와 소수 1 (0) | 2026.03.06 |
| [C/Python] 수학 1 (0) | 2026.03.05 |
| [C/Python] 2차원 배열 (0) | 2026.03.04 |