728x90
난이도 : Lv. 1
풀이일 : 2412172
https://school.programmers.co.kr/learn/courses/30/lessons/17682
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
풀이 코드
import java.util.HashMap;
import java.lang.Math;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int index = 0; // 현재 숫자 인덱스
int[] result = new int[3]; // 각 숫자 처리 결과 저장
String[] nums = dartResult.replace("10", "X").split(""); // 10 변환
HashMap<String, Integer> bonus = new HashMap<String, Integer>();
bonus.put("S", 1); // 보너스 정보 입력
bonus.put("D", 2);
bonus.put("T", 3);
for (int i = 0; i < nums.length; i++) {
if (bonus.get(nums[i]) != null) {
result[index - 1] = (int) Math.pow(result[index - 1], bonus.get(nums[i]));
}
else if (nums[i].equals("*")) {
result[index - 1] *= 2;
if (index > 1) {
result[index - 2] *= 2;
}
}
else if (nums[i].equals("#")) {
result[index - 1] *= -1;
}
else { // 숫자 저장
result[index] = nums[i].equals("X") ? 10 : Integer.parseInt(nums[i]);
index++;
}
}
for (int i = 0; i < 3; i++) { // 처리된 값 더하기
answer += result[i];
}
return answer;
}
}
- 파이썬 로직과 마찬가지로 숫자들이 주어지면 배열에 넣고, 추가 연산이 주어질때마다 해당 숫자를 변경한다.
- 현재 어떤 숫자를 계산해야 하는지는 index로 관리한다.
- 모든 숫자들을 처리한 이후, 처리된 값을 모두 더해 반환한다.
실행 결과
수정 코드
import java.util.HashMap;
import java.lang.Math;
class Solution {
public int solution(String dartResult) {
int answer = 0;
int index = 0;
int[] result = new int[3];
String[] nums = dartResult.replace("10", "X").split("");
HashMap<String, Integer> bonus = new HashMap<String, Integer>(){{
put("S", 1);
put("D", 2);
put("T", 3);
}};
for (int i = 0; i < nums.length; i++) {
if (bonus.get(nums[i]) != null) {
result[index - 1] = (int) Math.pow(result[index - 1], bonus.get(nums[i]));
}
else if (nums[i].equals("*")) {
result[index - 1] *= 2;
if (index > 1) {
result[index - 2] *= 2;
}
}
else if (nums[i].equals("#")) {
result[index - 1] *= -1;
}
else {
result[index] = nums[i].equals("X") ? 10 : Integer.parseInt(nums[i]);
index++;
}
}
for (int i = 0; i < 3; i++) {
answer += result[i];
}
return answer;
}
}
- HashMap에 처음부터 S, D, T에 대한 정보를 넣고 싶은데 할 줄 몰라서 찾아보고 수정했다. 유의미한 변화는 없는데 이후에 뭘 더 넣을 게 아니라서 파이썬 풀이처럼 한 번에 넣어두고 싶었다.
'알고리즘 > Lv. 1' 카테고리의 다른 글
프로그래머스 86491 최소직사각형 파이썬 풀이 (0) | 2024.12.24 |
---|---|
프로그래머스 12935 제일 작은 수 제거하기 자바스크립트 풀이 (1) | 2024.12.20 |
프로그래머스 17682 다트 게임 파이썬 풀이 (0) | 2024.12.17 |
프로그래머스 12935 제일 작은 수 제거하기 자바 풀이 (0) | 2024.12.16 |
프로그래머스 12935 제일 작은 수 제거하기 파이썬 풀이 (0) | 2024.12.16 |