본문 바로가기

코딩테스트/백준

[C/Python] 기하 1: 직사학형과 삼각형

이번 단원에서는 평면 좌표 위에서 도형의 성질을 이용해 최적의 해를 찾는 연습을 했습니다. 파이썬과 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)

  1. 자료형의 중요성: 알고리즘 자체보다 데이터를 담는 그릇(int vs long long)의 크기가 정답을 결정짓는 핵심 변수가 될 수 있음을 확인했습니다.
  2. 수학적 통찰: 복잡한 반복문보다 수식 한 줄(4n, 2 * {temp} - 1)이 코드의 성능과 가독성을 결정합니다.
  3. 정보처리기사 대비: 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