[백준 2480] 주사위 세개 | Java

2025. 3. 25. 20:01·학습 기록/문제풀이
반응형

문제

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
  2. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
  3. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.


풀이

변수 설정

Map<Integer, Integer> count = new HashMap<>();
for (int i=0; i<3; i++) {
	int input = sc.nextInt();
	count.put(input, count.getOrDefault(input, 0) + 1);
}
  • 주사위 눈의 개수를 저장할 Map (key: 주사위 눈, value: 횟수)

같은 눈이 3개가 나오는 경우

if (count.size() == 1) {
	int value = count.keySet().iterator().next();
    result = 10000 + 1000 * value;
}
  • `iterator` : 컬렉션을 순회할 수 있는 Iterator 객체 반환

같은 눈이 2개가 나오는 경우

else if (count.size() == 2) {
    int value = 0;
    for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
    	if (entry.getValue() == 2) {
        	value = entry.getKey();
            break;
        }
    }
    result = 1000 + 100 * value;
}
  • 2번 나온 주사위 눈을 찾음

같은 눈이 없는 경우

else {
    int value = Collections.max(count.keySet());
    result = value * 100;
}
  • Map에 저장된 key 중 가장 큰 값을 찾음
  • `Collections.max()` : List나 Set에서 가장 큰 값을 찾는 메소드 

전체 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<Integer, Integer> count = new HashMap<>();
        for (int i=0; i<3; i++) {
            int input = sc.nextInt();
            count.put(input, count.getOrDefault(input, 0) + 1);
        }
        int result;

        if (count.size() == 1) {
            int value = count.keySet().iterator().next();
            result = 10000 + 1000 * value;
        } else if (count.size() == 2) {
            int value = 0;
            for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
                if (entry.getValue() == 2) {
                    value = entry.getKey();
                    break;
                }
            }
            result = 1000 + 100 * value;
        } else {
            int value = Collections.max(count.keySet());
            result = value * 100;
        }
        System.out.println(result);
    }
}

 


마무리

문제는 사실 매우 쉬운 문제임

자바를 안쓴지 오래되었더니 문법이 생각이 잘 안나서 쉬운거 풀면서 익숙해 지는 중이다..

그냥 무지성 문제풀기만 하면 또 까먹을 것 같아서 자주 쓸거같은 부분은 한번 더 살펴봐야겠당

 

문제 링크

반응형

'학습 기록 > 문제풀이' 카테고리의 다른 글

[프로그래머스] N으로 표현 | kotlin  (2) 2025.03.19
[프로그래머스] 주식 가격 | kotlin  (0) 2025.02.04
[소프티어] 장애물 인식 프로그램 | kotlin  (0) 2025.02.04
[소프티어] 함께하는 효도 | kotlin  (0) 2025.02.04
[소프티어] 나무섭지 | kotlin  (0) 2025.02.02
'학습 기록/문제풀이' 카테고리의 다른 글
  • [프로그래머스] N으로 표현 | kotlin
  • [프로그래머스] 주식 가격 | kotlin
  • [소프티어] 장애물 인식 프로그램 | kotlin
  • [소프티어] 함께하는 효도 | kotlin
BaekCCI
BaekCCI
  • BaekCCI
    BaekLog
    BaekCCI
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 학습 기록
        • 안드로이드
        • 문제풀이
        • kotlin
      • 우아한 테크코스
      • 백씨의 하루
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    우테코
    Android
    우아한테크코스
    소프티어
    알고리즘
    코틀린
    백준
    Algorithm
    Java
    i/o extended android
    androiddeveloper
    프로그래머스
    gdg korea
    Kotlin
    softeer
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.6
BaekCCI
[백준 2480] 주사위 세개 | Java
상단으로

티스토리툴바