[백준 BOJ] 28635번 Индикатор (C++/cpp)

2026. 1. 8. 16:50PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/28635

 

백준 BOJ 28635번 Индикатор 문제 사진1
백준 BOJ 28635번 Индикатор 문제 사진2

 

접근 방법 - 기초적인 사칙연산 문제

백준의 28635번 문제는 기초적인 사칙연산을 활용하여 간단히 해결할 수 있는 문제이다.

해당 문제는, 카운터의 화면에 표시된 숫자(a)에서 특정 숫자(b)까지 만드는 데에 버튼을 눌러야 하는 총횟수를 구하여 출력하면 되는 문제이다.

이때 버튼을 눌렀을 때 화면에 표시되는 숫자는 다음과 같은 규칙에 따라 변동이 된다.

  • 카운터의 버튼을 누르면, 수가 1씩 증가한다.
  • 특정 숫자(m)를 넘어가면, 화면의 숫자는 1로 돌아간다.

외국어로 작성된 문제 지문에 대한 해석본은 아래 링크에 있으니, 문제 해결할 시 함께 참고하면 좋을 것이다.

https://www.acmicpc.net/board/view/148182

 

필자는 정답을 구하는 방식을 2가지 경우로 나누었고, 각 경우에 알맞은 로직을 구성하여 이에 따라 코드를 작성하였다.

* 목표하는 숫자(b)가 현재 화면의 숫자(a)보다 크거나 같은 경우
이 경우는, 화면에 표시 가능한 숫자의 최댓값(m)을 거치지 않아도 되기 때문에 비교적 간단하다.
따라서, 버튼을 (b - a)번만 누른다면 목표하는 숫자에 도달할 수 있다고 볼 수 있다.

* 목표하는 숫자(b)가 현재 화면의 숫자(a)보다 작은 경우
이 경우는, 아래의 3가지 절차를 거쳐 b에 도달하게끔 해야 한다.
- a에서 m으로 만드는 데에 버튼을 누르는 횟수 (m - a)
- m에서 1로 만드는 데에 버튼을 누르는 횟수 (1)
- 1에서 b로 만드는 데에 버튼을 누르는 횟수 (b - 1)
위를 모두 더하면 (m-a)+1+(b-1)라는 식이 나오고, 이는 결국 m - a + b라는 식으로 줄일 수 있다.
따라서, 버튼을 (m - a + b)번 누른다면 목표하는 숫자에 도달할 수 있다고 볼 수 있다.

 

해당 문제에 대한 해설로는 위 설명으로 충분한 것으로 판단되어, 더 구체적인 설명은 생략하고자 한다.

혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 코드를 참고해 보길 바란다.

필자는 아래처럼 코드를 작성하여 문제를 해결하였다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 28635번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int m, a, b;
	cin >> m >> a >> b;

	if (a <= b) { cout << b - a << endl; }
	else { cout << m - a + b << endl; }
}

 

제출 결과

백준 BOJ 28635번 Индикатор 문제 C++ 제출 결과

(2024.09.13 백준 28635번 문제 제출 결과)