으아 ㅠㅠ 이 문제 난이도 하
라는데..😭
못 풀었다.
졸면서 40분 고민한것 같다ㅠㅠ
답을 찾을 수 없다고 판단해서 chat에게 코드를 부탁함.. 🙈
class Solution {
public int solution(String dartResult) {
int[] score = new int[3];
int idx = 0;
for (int i = 0; i < dartResult.length(); i++) {
char c = dartResult.charAt(i);
if (Character.isDigit(c)) {
if (c == '1' && dartResult.charAt(i + 1) == '0') {
score[idx] = 10;
i++;
} else {
score[idx] = c - '0';
}
} else if (c == 'S' || c == 'D' || c == 'T') {
if (c == 'D') {
score[idx] = (int) Math.pow(score[idx], 2);
} else if (c == 'T') {
score[idx] = (int) Math.pow(score[idx], 3);
}
idx++;
} else if (c == '*' || c == '#') {
idx--;
if (c == '*') {
score[idx] *= 2;
if (idx > 0) {
score[idx - 1] *= 2;
}
} else {
score[idx] *= -1;
}
idx++;
}
}
return score[0] + score[1] + score[2];
}
}
나의 경우에는 10을 찾아낼 방법을 떠올리지 못해서 풀어내지 못했는데
이런 간단한 방법이 있었다니
공부공부 🤓✏️
if (Character.isDigit(c)) { // char 자료형이 숫자인지 판별
if (c == '1' && dartResult.charAt(i + 1) == '0') {
score[idx] = 10;
i++;
}
}
추가로 알아두면 좋을것 같은 Character 메서드
char toUpperCase(char ch): 문자 하나(ch)를 대문자로 변환해서 리턴
char toLowerCase(char ch): 문자 하나(ch)를 소문자로 변환해서 리턴
boolean isUpperCase(char ch): 문자가 대문자인지 판별해서 boolean 리턴
boolean isLowerCase(char ch): 문자가 소문자인지 판별해서 boolean 리턴
boolean isDigit(char ch): 숫자인지 판별해서 boolean 리턴
boolean isLetter(char ch): 문자인지 판별해서 boolean 리턴
boolean isWhitespace(char ch): 공백문자인지 판별해서 boolean 리턴
이외에도 다른 사람들이 작성한 정말 다양한 코드들이 있다.
import java.util.*;
class Solution {
public int solution(String dartResult) {
Stack<Integer> stack = new Stack<>();
int sum = 0;
for (int i = 0; i < dartResult.length(); ++i) {
char c = dartResult.charAt(i);
if (Character.isDigit(c)) {
sum = (c - '0');
if (sum == 1 && dartResult.charAt(i + 1) == '0') {
sum = 10;
i++;
}
stack.push(sum);
} else {
int prev = stack.pop();
if (c == 'D') {
prev *= prev;
} else if (c == 'T') {
prev = prev * prev * prev;
} else if (c == '*') {
if (!stack.isEmpty()) {
int val = stack.pop() * 2;
stack.push(val);
}
prev *= 2;
} else if (c == '#') {
prev *= (-1);
}
stack.push(prev);
}
}
int totalScore = 0;
while (!stack.isEmpty()) {
totalScore += stack.pop();
}
return totalScore;
}
}
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
static int[] sum = new int[3];
static int solution(String msg){
String reg = "([0-9]{1,2}[S|T|D][*|#]{0,1})";
Pattern p = Pattern.compile(reg+reg+reg);
Matcher m = p.matcher(msg);
m.find();
for(int i=1; i<=m.groupCount(); i++){
Pattern p1 = Pattern.compile("([0-9]{1,2})([S|T|D])([*|#]{0,1})");
Matcher m1 = p1.matcher(m.group(i));
m1.find();
sum[i-1] = (int)Math.pow(Integer.parseInt(m1.group(1)), getpow(m1.group(2)));
setting(i,m1.group(3));
}
return(sum[0]+ sum[1]+ sum[2]);
}
static void setting(int idx, String msg){
if(msg.equals("*")){
sum[idx - 1] *= 2;
if(idx > 1 ){
sum[idx - 2] *=2;
}
} else if(msg.equals("#")){
sum[idx - 1] *=-1 ;
}
}
static int getpow(String mag){
if(mag.equals("S")){
return 1;
} else if(mag.equals("D")){
return 2;
} else {
return 3;
}
}
}
확실히 문자열 가공하는 방법은 실행 시간이 오래 걸리는것 같다.
그리고 Pattern 클래스는 한번도 사용해보지 않아서 너무 신기해..🙊
공부 필요 🤓✏️
import java.util.Hashtable;
class Solution {
public int solution(String dartResult) {
int answer = 0;
Hashtable<String, Integer> table = new Hashtable<>();
table.put("S",1);
table.put("D",2);
table.put("T",3);
int[] temp = new int[3];
int num = 0;
int count = 0;
for(int i=0; i<dartResult.length(); i++) {
String key = dartResult.charAt(i) + "";
if(table.containsKey(key)) {
num = (int)Math.pow(num, table.get(key));
temp[count++] = num;
num = 0;
} else if(key.equals("*")) {
if(count-2 >= 0) temp[count-2] *= 2;
temp[count-1] *= 2;
} else if(key.equals("#")) {
temp[count-1] *= -1;
} else {
if(num > 0) key = "10";
num = Integer.parseInt(key);
}
}
for(int i=0; i<temp.length; i++) {
answer += temp[i];
}
return answer;
}
}
오잉 해시 테이블은 금방 끝날 줄 알았는데 의외였다
내가 잘못 알고있는걸까? 🤔
class Solution {
public int solution(String dartResult) {
int length = dartResult.length();
int[] score = {0, 0, 0};
int index = -1;
for (int i=0; i<length; i++) {
char ch = dartResult.charAt(i);
switch (ch) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
index++;
score[index] = ch - '0';
if ((ch == '1') && (dartResult.charAt(i+1) == '0')) {
score[index] *= 10;
i++;
}
break;
case 'S':
case 's':
break;
case 'D':
case 'd':
score[index] *= score[index];
break;
case 'T':
case 't':
score[index] *= score[index]*score[index];
break;
case '*':
if (index == 0) {
score[index] *= 2;
} else {
score[index-1] *= 2;
score[index] *= 2;
}
break;
case '#':
score[index] *= -1;
break;
default:
return -1;
}
}
return score[0]+score[1]+score[2];
}
}
분석중 🤓