[백준 BOJ] 10810번 공 넣기 (C++/cpp)

2023. 10. 2. 15:13PS (Program Solving)/BOJ (백준)

문제 설명

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

 

10810번: 공 넣기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이

www.acmicpc.net

백준 BOJ 10810번 공 넣기 문제 사진

 

접근 방법 - 배열을 활용한 기초 알고리즘 문제

백준의 10810번 문제는 배열을 응용하여 간단하게 해결할 수 있는 문제이다.

해당 문제는, 주어진 바구니에 숫자가 적힌 공을 특정 규칙에 맞게 넣는다고 하였을 때, 각 바구니에 있는 공의 숫자를 출력하면 되는 문제이다.

문제에도 기재되어 있으나, 공을 넣는 규칙에 대해선 아래에 함께 정리해 놓았다.

- 각 줄마다 a b c로 입력이 주어질 때, a~b번 바구니에 c 숫자가 적힌 공을 하나씩 넣도록 한다.
- 만일 바구니에 공이 이미 들어가 있다면, 기존에 있는 공을 빼고 새로운 공을 집어넣도록 한다.

필자는 바구니들을 배열 인덱스로 취급하고 배열값을 들어가 있는 공의 숫자로 취급하며 문제를 해결하였다.

바구니의 번호가 연속된다는 점이 있어, 큰 어려움 없이 해결할 수 있는 문제였으리라 예상된다.

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

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 바구니의 개수(n)와 공을 넣는 횟수(m)를 입력받는다.

 

2) 바구니에 대한 배열(arr)을 선언하면서, 모든 배열값들을 0으로 초기화한다.

(처음엔 모든 바구니가 비어있기 때문에, 모든 배열값을 0으로 설정해 놓고 시작하도록 하였다.)

 

3) m의 크기만큼, 반복문을 수행하여 아래의 연산을 취한다.

- 3개의 입력값(a, b, c)을 순차적으로 입력받는다. (a, b, c에 대한 각 의미는, 위의 박스를 참고하면 된다.)

- 다른 반복문을 활용하여, a번부터 b번까지의 arr 값들을 모두 c로 설정한다. 

("바구니에 이미 공이 있는 경우에도 기존의 공을 빼고 새로운 공을 넣으라는 조건"이 있으니, 이때에도 배열값을 바꿔야 한다.)

 

4) 3)의 연산이 완료되었다면, 최종적으로 저장된 arr의 값들을 순차적으로 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

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

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

	int n, m;
	cin >> n >> m;

	int arr[101] = { 0 };
	for (int i = 0; i < m; i++) {
		int a, b, c;
		cin >> a >> b >> c;

		for (int j = a; j <= b; j++) {
			arr[j] = c;
		}
	}

	for (int i = 1; i <= n; i++) {
		cout << arr[i] << " ";
	}
	cout << endl;
}

 

제출 결과

백준 BOJ 10810번 공 넣기 문제 C++ 제출 결과

(2023.08.16 백준 10810번 문제 제출 결과)

반응형