백준 <주사위 세 개> (C++ 랜덤함수)
2026. 4. 3. 15:53ㆍProgrammers

다음과 같은 문제를 풀게 되었다.
그러다가 문제가 생겼다. C++에서 랜덤 함수를 사용해본 적이 없어 시작부터 막혀버렸다.
그래서 간단하게 C++ 랜덤함수를 찾아보고 사용해보았다.
C++에서 랜덤함수
C++에서 랜덤함수를 사용하려면 상단에 헤더를 선언해줘야 한다.
기본적인 틀은 다음과 같다.
#include <random>
random_device 변수1;
mt19937 변수2(변수1());
uniform_int_distribution <int> 변수3(1, 6);
- 변수1
- 시드를 만들기 위한 객체
- 변수2
- 난수를 생성하는 엔진 객체
- 변수3
- 원하는 범위의 정수로 바꿔주는 분포 객체
아래는 백준의 문제를 풀다가 본 코드이다.

오답노트
answer = gen1 * 1000; 에서 왜 오류가 나는지 확인하다보니 너무 코드를 잘못 쓰고 있었다.
이상한 부분을 다시 보니 틀린 부분이 세 가지 있었다.
- 시드를 3개나 만들었다.
- 분포객체를 안만들었다.
- 엔진객체를 그대로 변수처럼 사용해 오류가 났다.
이 부분을 해결하기 위해 따로 int 변수를 만들어 랜덤 값을 넣는 변수 a, b, c 세 개를 만들어 오류를 해결하고 코드를 완성해보면 다음과 같다.
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dist(1,6);
int a = dist(gen);
int b = dist(gen);
int c = dist(gen);
int answer;
if (a == b && b == c)
{
answer = a * 1000 + 10000;
}
else if (a == b || b == c || a == c)
{
if (a==b || a==c)
answer = a*100 + 1000;
else
answer = b*100 + 1000;
}
else
{
a = (a>b) ? a : b;
answer = (a>c) ? a*100 : c*100;
}
std::cout << a << ' ' << b << ' ' << c << '\n' <<answer << '\n';
return 0;
}
핵심은 if 조건문으로 주사위 값을 비교하는 것이다.
정리
C++에서 랜덤 값을 처음 접해봤는데 생소한 변수 타입과 함수를 사용해 어색했지만 자주 접해보며 적응해야 할 부분인 것 같다.
+ 이 문제는 입력을 받고 입력 받은 값에 따라 바뀌는 문제라서 랜덤함수와는 전혀 관련이 없다는 것을 알았습니다...
'Programmers' 카테고리의 다른 글
| <프로그래머스 C++> 숫자 문자열과 영단어 (1) | 2026.04.21 |
|---|---|
| < 프로그래머스 C++ > 시저 암호 (0) | 2026.04.20 |
| < 프로그래머스 > 최소직사각형 (0) | 2026.04.17 |
| 프로그래머스 연습하기<제일 작은 수 제거하기> (0) | 2026.03.23 |
| 프로그래머스 핸드폰 번호 가리기 문제 (1) | 2026.03.18 |