© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 6856 - Roll the Dice

2025-12-12
BOJ
브론즈 III
cpp
원본 문제 보기
브루트포스 알고리즘

문제

BOJ 6856 - Roll the Dice

m면 주사위와 n면 주사위를 각각 한 번씩 굴렸을 때, 두 주사위의 합이 정확히 10이 되는 경우의 수를 구한다. 각 주사위는 1부터 해당 면의 수까지의 값을 가진다.

결과가 1가지이면 "There is 1 way to get the sum 10.", 그 외에는 "There are X ways to get the sum 10."을 출력한다.

입력

첫 번째 줄에 두 정수 m, n이 주어진다. m은 첫 번째 주사위의 면 수, n은 두 번째 주사위의 면 수이다.

출력

두 주사위의 합이 10이 되는 경우의 수에 따라 정해진 형식으로 한 줄을 출력한다.

예제

입력출력
6 6There are 3 ways to get the sum 10.
1 9There is 1 way to get the sum 10.

풀이

m면 주사위와 n면 주사위의 합이 10이 되는 경우를 순회하여 개수를 센다.

  1. 첫 번째 주사위 값 i를 1부터 m까지 순회한다.
  2. 두 번째 주사위 값은 10 - i가 되어야 한다.
  3. 10 - i가 1 이상 n 이하이면 유효한 경우이므로 ways를 증가시킨다.
  4. 최종 ways 값에 따라 단수형 또는 복수형 문장을 출력한다.

핵심 아이디어: 첫 번째 주사위 값을 고정하면 두 번째 주사위 값이 자동으로 결정된다. 따라서 O(m) 순회만으로 모든 경우를 열거할 수 있다.

코드

#include <iostream>
using namespace std;
 
int main()
{
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  int m, n;
  cin >> m >> n;
 
  int ways = 0;
  for (int i = 1; i <= m; i++)
  {
    if (10 - i >= 1 && 10 - i <= n)
      ways++;
  }
 
  if (ways == 1)
    cout << "There is 1 way to get the sum 10." << "\n";
  else
    cout << "There are " << ways << " ways to get the sum 10." << "\n";
 
  return 0;
}

복잡도

  • 시간: O(m) — 첫 번째 주사위 면 수만큼 순회
  • 공간: O(1) — 추가 자료구조 없이 카운터 변수만 사용