본문 바로가기

코딩테스트/백준

[C/Python] 수학 1

1. 진법 변환 (2745번, 11005번)

진법 변환은 아스키코드거듭제곱의 원리를 이해하는 것이 핵심입니다.

  • 10진수 B진수: n을 b로 나눈 나머지를 기록하고 몫을 갱신 (마지막에 결과 뒤집기 필수!)
  • B진수 10진수: 각 자리 숫자에 진법의 거듭제곱을 곱하여 합산.
  • 💡 Key Point:
    • Python: int(string, base)와 divmod()로 한 줄 컷!
    • C++: ch - 'A' + 10과 같은 아스키 연산 및 reverse() 함수 활용.

2. 세탁소 사장 동혁 (2720번) - 그리디의 기초

거스름돈을 가장 큰 단위부터 나누어 해결하는 **탐욕 알고리즘(Greedy)**의 정석입니다.

  • 로직: 쿼터(25) 다임(10) 니켈(5) 페니(1) 순으로 나누기.
  • 💡 Key Point:
    • 나머지를 다음 연산의 피연산자로 넘기는 연쇄 나눗셈이 포인트.
    • C++에서는 /와 % 연산자를 번갈아 사용.

3. 중앙 이동 알고리즘 (2903번) - 규칙 찾기

정사각형의 점이 단계별로 어떻게 늘어나는지 수열의 일반항을 도출하는 문제입니다.

  • 일반식: (2^n + 1)^2
  • 💡 Key Point:
    • C++에서는 pow() 함수를 쓸 때 double 오차를 주의하여 (int) 캐스팅을 하거나, 더 효율적인 **비트 연산(1LL << n)**을 사용하자!

4. 벌집 (2292번) - 계차수열

중심(1)에서부터 방의 개수가 6의 배수(6, 12, 18)로 늘어나는 규칙을 찾습니다.

  • 로직: while 문을 돌리며 범위(end_room)를 확장하고 층수(count)를 카운트.
  • 💡 Key Point:
    • n=1인 경우의 예외 처리가 중요하며, count의 시작점과 증감 위치를 정확히 잡아야 함.

5. 분수찾기 (1193번) - 지그재그 행렬

대각선 방향으로 번호가 매겨지는 지그재그 규칙을 파악하는 문제입니다.

  • 로직: 몇 번째 사선(line)에 있는지 구한 뒤, 홀수/짝수 층에 따라 분자/분모 진행 방향을 반전.
  • 💡 Key Point:
    • 짝수 층: 분자 증가, 분모 감소 / 홀수 층: 분자 감소, 분모 증가.

6. 달팽이는 올라가고 싶다 (2869번) - 시간 복잡도 O(1)

반복문을 쓰면 무조건 시간 초과가 나는 문제로, 수학적 수식을 세워야 합니다.

  • 정수 올림 공식: (v - b - 1) / (a - b) + 1
  • 💡 Key Point:
    • -1을 통해 '마지막 날 딱 맞춰 도착하는 경우'의 오차를 보정하는 정수 산술 트릭이 핵심!
    • C++와 Python의 정수 나눗셈(내림) 특성을 이용한 천재적인 수식.

🏁 공부를 마치며 (Self-Feedback)

  • Python: 슬라이싱([::-1]), f-string, divmod 같은 내장 기능 덕분에 코드가 매우 간결해짐.
  • C++: ios_base::sync_with_stdio(false), long long 자료형 선택, 비트 연산 등 시스템적인 최적화를 고민해 볼 수 있었음.

'코딩테스트 > 백준' 카테고리의 다른 글

[C/Python] 기하 1: 직사학형과 삼각형  (0) 2026.03.07
[C/Python] 약수, 배수와 소수 1  (0) 2026.03.06
[C/Python] 2차원 배열  (0) 2026.03.04
[C/Python] 심화1  (0) 2026.03.04
[C/Python] 문자열  (0) 2026.03.02