2025. 2. 2. 15:59ㆍPS (Program Solving)/BOJ (백준)
문제 설명
https://www.acmicpc.net/problem/21631
접근 방법 - 기초적인 사칙연산을 활용한 구현 문제
백준의 21631번 문제는 사칙연산을 활용하여 비교적 쉽게 해결할 수 있는 문제이다.
해당 문제는, 입력으로 주어지는 검은 말과 하얀 말의 개수에 대하여 최대로 만들 수 있는 검은 줄무늬의 개수를 구하여 출력하면 되는 문제이다.
이때 검은 말과 하얀 말을 하나씩 교차로 배치하여 줄무늬를 만들어야한다는 전제가 있다.
해당 문제의 지문에 대하여 한글 번역본은 아래 링크를 참고하면 된다.
https://www.acmicpc.net/board/view/85780
필자는 아래처럼 구상하여 해결 방법을 모색하였다.
1) 검은 말이 하얀 말보다 더 많은 경우
(ex) White 2 / Black 5 => BWBWB (3개의 검은색 줄무늬)
=> 하얀색 말을 다 사용하여 만들어진 구성이기 때문에, 이 경우엔 (하얀 말의 개수)+1가 정답
2) 하얀 말이 검은 말보다 더 많은 경우
(ex) White 5 / Black 2 => WBWBW (2개의 검은색 줄무늬)
=> 검은색 말을 다 사용하여 만들어진 구성이기 때문에, 이 경우엔 (검은 말의 개수)가 정답
3) 검은 말과 하얀 말의 개수가 동일한 경우
(ex) White 3 / Black 3 => WBWBWB (3개의 검은색 줄무늬)
=> 모든 말을 전부 사용하여 만들어진 구성이기 때문에, 이 경우엔 (검은 말의 개수)가 정답
필자는 위처럼 3가지 경우를 구상하였고, 이를 기반으로 2개의 케이스로 나누어 정답을 출력하게 하였다.
(더 이상의 별 내용은 없지만) 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면, 아래의 설명과 코드를 참고해보길 바란다.
필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.
코드의 실행 순서
1) 하얀 말의 개수(white)와 검은 말의 개수(black)를 순서대로 입력받는다.
(이때 문제를 확인해보면, 입력 범위가 10^18이라 일반적인 int로는 오답이 생길 수 있기 때문에 long long int로 입력을 받도록 한다.)
2) 2가지의 경우로 나누어 출력을 수행한다. (if문을 구성한 근거는 위 설명을 참고하길 바란다.)
- black이 white보다 작거나 같다면, 이 경우엔 검은 말을 모두 사용할 수 있는 경우가 되기 때문에 black 값을 그대로 정답으로 출력한다.
- 다만 white가 black보다 작다면, 이 경우는 검은 말이 남을 수도 있는 경우가 되기 때문에 white+1을 정답으로 출력한다.
3) 2)에서 정답을 출력하였다면, 실행을 종료한다.
성공한 코드
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;
//백준 21631번 코드
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
long long int white, black;
cin >> white >> black;
if (black <= white) {
cout << black << endl;
}
else {
cout << white + 1 << endl;
}
}
제출 결과
(2023.06.27 백준 21631번 문제 제출 결과)
'PS (Program Solving) > BOJ (백준)' 카테고리의 다른 글
[백준 BOJ] 23246번 Sport Climbing Combined (C++/cpp) (0) | 2025.02.06 |
---|---|
[백준 BOJ] 2210번 숫자판 점프 (C++/cpp) (0) | 2025.01.27 |
[백준 BOJ] 2476번 주사위 게임 (C++/cpp) (0) | 2025.01.26 |
[백준 BOJ] 10768번 특별한 날 (C++/cpp) (0) | 2025.01.01 |
[백준 BOJ] 1769번 3의 배수 (C++/cpp) (0) | 2024.12.29 |