알고리즘
[백준] - 2480번
예림밈
2025. 4. 25. 16:08
D+1) 오늘부터 코딩 테스트 준비 언어를 Java로 바꿔서 해보고자 한다. 파이썬이 아직 더 익숙하지만 자바에 익숙해져봐야지..!! 🔥
문제
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×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개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
코드
import java.util.HashSet;
import java.util.Set;
import java.util.Scanner;
public class Dice {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a;
int b;
int c;
int max;
a=sc.nextInt();
b=sc.nextInt();
c=sc.nextInt();
Set<Integer> set = new HashSet<>();
Set<Integer> duplicates = new HashSet<>();
// 중복되는 값 찾기
if (!set.add(a)) {
duplicates.add(a);
}
if (!set.add(b)) {
duplicates.add(b);
}
if (!set.add(c)) {
duplicates.add(c);
}
max = Math.max(Math.max(a, b), c);
if(a == b && b == c){
System.out.println(10000+(a*1000));
} else if (duplicates.size()==1) {
for (Integer element : duplicates) {
System.out.println(1000+(element*100));
break; // 첫 번째 요소만 가져오고 루프 종료
}
}
else{
System.out.println(max*100);
}
}
}
풀이
내가 적용한 풀이방식은 다음과 같다.
1) if(a == b && b == c) : 같은 눈 3개가 나올 경우 체크
2) 같은 눈이 두 번 나온 경우의 수 체크 : Set을 두 번 활용하여 중복된 값을 체크
- Set은 중복된 값을 허용하지 않기 때문에 set에 저장되어 있지 않다면 해당 값이 중복으로 나온 의미와 같다.
따라서 duplicates에 저장하여 같은 눈이 두 번 나온 경우의 수를 체크하였다.
3) 모두 다 다른 눈이 나온 경우 : 앞서 나온 두 가지 경우에 해당하지 않으므로 else문으로 적용하여 풀이했다.
결과
맞았습니다!!🤩
회고
코딩테스트는 파이썬으로만 하다가 처음으로 Java를 사용하여 문제를 풀어봤는데, 입출력부터 벌써 길..다.. 하지만 차차 적응해서 익숙해지려고 한다.
해당 게시글은 벨로그에서 이전된 글입니다. (https://velog.io/@yerim159/%EB%B0%B1%EC%A4%80-2480%EB%B2%88)