๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/17682
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
์นด์นด์คํก ๊ฒ์๋ณ์ ํ๋ฐ๊ธฐ ์ ๊ท ์๋น์ค๋ก ๋คํธ ๊ฒ์์ ์ถ์ํ๊ธฐ๋ก ํ๋ค. ๋คํธ ๊ฒ์์ ๋คํธํ์ ๋คํธ๋ฅผ ์ธ ์ฐจ๋ก ๋์ ธ ๊ทธ ์ ์์ ํฉ๊ณ๋ก ์ค๋ ฅ์ ๊ฒจ๋ฃจ๋ ๊ฒ์์ผ๋ก, ๋ชจ๋๊ฐ ๊ฐ๋จํ ์ฆ๊ธธ ์ ์๋ค.
๊ฐ ์
์ฌํ ๋ฌด์ง๋ ์ฝ๋ฉ ์ค๋ ฅ์ ์ธ์ ๋ฐ์ ๊ฒ์์ ํต์ฌ ๋ถ๋ถ์ธ ์ ์ ๊ณ์ฐ ๋ก์ง์ ๋งก๊ฒ ๋์๋ค. ๋คํธ ๊ฒ์์ ์ ์ ๊ณ์ฐ ๋ก์ง์ ์๋์ ๊ฐ๋ค.
- ๋คํธ ๊ฒ์์ ์ด 3๋ฒ์ ๊ธฐํ๋ก ๊ตฌ์ฑ๋๋ค.
- ๊ฐ ๊ธฐํ๋ง๋ค ์ป์ ์ ์๋ ์ ์๋ 0์ ์์ 10์ ๊น์ง์ด๋ค.
- ์ ์์ ํจ๊ป Single(S), Double(D), Triple(T) ์์ญ์ด ์กด์ฌํ๊ณ ๊ฐ ์์ญ ๋น์ฒจ ์ ์ ์์์ 1์ ๊ณฑ, 2์ ๊ณฑ, 3์ ๊ณฑ (์ ์1 , ์ ์2 , ์ ์3 )์ผ๋ก ๊ณ์ฐ๋๋ค.
- ์ต์ ์ผ๋ก ์คํ์(*) , ์์ฐจ์(#)์ด ์กด์ฌํ๋ฉฐ ์คํ์(*) ๋น์ฒจ ์ ํด๋น ์ ์์ ๋ฐ๋ก ์ ์ ์ป์ ์ ์๋ฅผ ๊ฐ 2๋ฐฐ๋ก ๋ง๋ ๋ค. ์์ฐจ์(#) ๋น์ฒจ ์ ํด๋น ์ ์๋ ๋ง์ด๋์ค๋๋ค.
- ์คํ์(*)์ ์ฒซ ๋ฒ์งธ ๊ธฐํ์์๋ ๋์ฌ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์คํ์(*)์ ์ ์๋ง 2๋ฐฐ๊ฐ ๋๋ค. (์์ 4๋ฒ ์ฐธ๊ณ )
- ์คํ์(*)์ ํจ๊ณผ๋ ๋ค๋ฅธ ์คํ์(*)์ ํจ๊ณผ์ ์ค์ฒฉ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ค์ฒฉ๋ ์คํ์(*) ์ ์๋ 4๋ฐฐ๊ฐ ๋๋ค. (์์ 4๋ฒ ์ฐธ๊ณ )
- ์คํ์(*)์ ํจ๊ณผ๋ ์์ฐจ์(#)์ ํจ๊ณผ์ ์ค์ฒฉ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์ค์ฒฉ๋ ์์ฐจ์(#)์ ์ ์๋ -2๋ฐฐ๊ฐ ๋๋ค. (์์ 5๋ฒ ์ฐธ๊ณ )
- Single(S), Double(D), Triple(T)์ ์ ์๋ง๋ค ํ๋์ฉ ์กด์ฌํ๋ค.
- ์คํ์(*), ์์ฐจ์(#)์ ์ ์๋ง๋ค ๋ ์ค ํ๋๋ง ์กด์ฌํ ์ ์์ผ๋ฉฐ, ์กด์ฌํ์ง ์์ ์๋ ์๋ค.
0~10์ ์ ์์ ๋ฌธ์ S, D, T, *, #๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ด ์ ๋ ฅ๋ ์ ์ด์ ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ๋ผ.
์ ๋ ฅ ํ์
"์ ์|๋ณด๋์ค|[์ต์
]"์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด 3์ธํธ.
์) 1S2D*3T
- ์ ์๋ 0์์ 10 ์ฌ์ด์ ์ ์์ด๋ค.
- ๋ณด๋์ค๋ S, D, T ์ค ํ๋์ด๋ค.
- ์ต์ ์ *์ด๋ # ์ค ํ๋์ด๋ฉฐ, ์์ ์๋ ์๋ค.
์ถ๋ ฅ ํ์
3๋ฒ์ ๊ธฐํ์์ ์ป์ ์ ์ ํฉ๊ณ์ ํด๋นํ๋ ์ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์) 37
์ ์ถ๋ ฅ ์์
| ์์ | dartResult | answer |
| 1 | 1S2D*3T | 37 |
| 2 | 1D2S#10S | 9 |
| 3 | 1D2S0T | 3 |
| 4 | 1S*2T*3S | 23 |
| 5 | 1D#2T*3S | 5 |
| 6 | 1T2D3D# | -4 |
| 7 | 1D2S3T* | 59 |
๋ด๊ฐ ์์ฑํ ์ฝ๋
import java.util.*;
class Solution {
public int solution(String dartResult) {
// ์ต์ข
ํฉ์ฐ ์ ์๋ฅผ ์ ์ฅํ ๋ณ์
int answer = 0;
// ๊ฐ ๋ผ์ด๋์ ์ ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
int[] scores = new int[3];
// ํ์ฌ ๋ผ์ด๋ ์ธ๋ฑ์ค
int idx = 0;
// ์ ์๋ฅผ ์์๋ก ์ ์ฅํ ๋ณ์
int num = 0;
// ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํ
for (int i = 0; i < dartResult.length(); i++) {
// ํ์ฌ ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ
char c = dartResult.charAt(i);
// ์ซ์์ธ ๊ฒฝ์ฐ (์ ์ ๋ถ๋ถ)
if (Character.isDigit(c)) {
// '10' ์ฒ๋ฆฌ (์์ด '1'์ด๊ณ ๋ค๊ฐ '0'์ธ ๊ฒฝ์ฐ)
if (c == '1' && i + 1 < dartResult.length() && dartResult.charAt(i+1) == '0') {
num = 10;
// '0'๊น์ง ์๋นํ์ผ๋ฏ๋ก ์ธ๋ฑ์ค ํ๋ ๋ ์ด๋
i++;
} else {
// ๋ฌธ์ '0'~'9' -> ์ค์ ์ซ์ 0~9
num = c - '0';
}
// ๋ณด๋์ค ์ฒ๋ฆฌ (S, D, T)
} else if (c == 'S' || c == 'D' || c == 'T') {
// 1์ ๊ณฑ
if (c == 'S') {
num = (int) Math.pow(num, 1);
// 2์ ๊ณฑ
} else if (c == 'D') {
num = (int) Math.pow(num, 2);
// 3์ ๊ณฑ
} else if (c == 'T') {
num = (int) Math.pow(num, 3);
}
// ๊ณ์ฐ๋ ์ ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ ํ ๋ผ์ด๋ ์ด๋
scores[idx++] = num;
// ์ต์
์ฒ๋ฆฌ (*, #)
} else if (c == '*' || c == '#') {
// ํ์ฌ ์ ์ 2๋ฐฐ
if (c == '*') {
scores[idx-1] *= 2;
// ์ด์ ์ ์๋ ์กด์ฌํ๋ฉด 2๋ฐฐ
if (idx > 1) {
scores[idx-2] *= 2;
}
// ํ์ฌ ์ ์ ๋ง์ด๋์ค๋ก ๋ณ๊ฒฝ
} else if (c == '#') {
scores[idx-1] *= -1;
}
}
}
// 3๋ผ์ด๋ ์ ์ ํฉ์ฐ
answer = scores[0] + scores[1] + scores[2];
// ์ต์ข
์ ์ ๋ฐํ
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋, ๋ฌธ์์ด๋ก ์ฃผ์ด์ง ๋คํธ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ฑ ํด์ ๊ฐ ๋ผ์ด๋๋ณ ์ ์๋ฅผ ๊ณ์ฐํ๊ณ ์ต์ข ํฉ์ ๊ตฌํ๋ ๋ฌธ์ ๋ผ๋ ์ ์ ํ์ ํ๋ค. ํนํ ์ ์๊ฐ 0๋ถํฐ 10๊น์ง ๊ฐ๋ฅํ๋ค๋ ์ ์์, ๋จ์ํ ํ ๊ธ์์ฉ ์๋ฅด๋ฉด ‘10’์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์ ์ ์ฃผ์ํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค. ๋ฐ๋ผ์ ๋ฌธ์์ด์ ์์ฐจ์ ์ผ๋ก ํ์ํ๋ฉด์ ์ซ์์ ๋ณด๋์ค, ์ต์ ์ ์ฐจ๋ก๋๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ํ๋จํ๋ค.
์กฐ๊ฑด์ ๋ถ์ํด ๋ณด๋ฉด, ๊ฐ ๋ผ์ด๋๋ “์ ์ + ๋ณด๋์ค + ์ต์ ”์ ํํ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ณด๋์ค๋ ์ ์๋ฅผ ์ ๊ณฑ ํํ๋ก ๋ฐ๊พธ๊ณ , ์ต์ ์ ํ์ฌ ์ ์๋ ์ด์ ์ ์๋ฅผ ์กฐ์ ํ๋ ์ญํ ์ ํ๋ค. ์ ์๋ ํ ์๋ฆฌ ๋๋ ๋ ์๋ฆฌ ์ซ์์ด๋ฏ๋ก, Character.isDigit()์ผ๋ก ์ซ์๋ฅผ ๊ฐ์งํ๊ณ ‘10’์ธ ๊ฒฝ์ฐ๋ฅผ ์์ธ ์ฒ๋ฆฌํด์ผ ํ๋ค. ์ดํ ๋ณด๋์ค ๋ฌธ์๊ฐ ๋์ค๋ฉด ํด๋น ์ ์์ ์ ๊ณฑ ์ฐ์ฐ์ ์ ์ฉํ๊ณ , ์ต์ ๋ฌธ์๊ฐ ๋์ค๋ฉด ์ ์๋ฅผ ์์ ํ๋ ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
์๋ฃ๊ตฌ์กฐ๋ก๋ ๊ฐ ๋ผ์ด๋๋ณ ์ ์๋ฅผ ์ ์ฅํ ์ ์๋ int[] scores ๋ฐฐ์ด์ ์ ํํ๋ค. ๋คํธ ๊ฒ์์ ์ ํํ 3๋ผ์ด๋๋ก ๊ณ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๊ฐ 3์ธ ๋ฐฐ์ด์ ์ฐ๋ ๊ฒ์ด ์ ์ ํ๋ค. ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ์ต์ ์ฒ๋ฆฌ ์ ์ด์ ๋ผ์ด๋ ์ ์์๋ ๋ฐ๋ก ์ ๊ทผํ ์ ์์ด ๊ตฌํ์ด ๊ฐ๋จํด์ง๋ค.
๋ก์ง์ ํ๋ฆ์ ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ์ํํ๋ฉด์, ์ซ์๋ฅผ ๋ง๋๋ฉด ์์ ๋ณ์์ ์ ์ฅํ๊ณ , ๋ณด๋์ค๋ฅผ ๋ง๋๋ฉด ํด๋น ์ ์๋ฅผ ์ ๊ณฑํ์ฌ ๋ฐฐ์ด์ ๊ธฐ๋กํ๋ค. ์ดํ ์ต์ ์ด ๋์ค๋ฉด ํ์ฌ ๋ผ์ด๋ ์ ์ ๋๋ ์ด์ ๋ผ์ด๋ ์ ์๋ฅผ ์์ ํ๋ค. ๋ชจ๋ ๋ฌธ์์ด ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ๋ฐฐ์ด์ ์ ์ฅ๋ ์ธ ๊ฐ์ ๋ผ์ด๋ ์ ์๋ฅผ ํฉ์ฐํด ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
์๊ฐ ๋ณต์ก๋๋ ๋ฌธ์์ด ๊ธธ์ด์ ๋น๋กํ์ฌ O(N)์ผ๋ก ๋์ํ๋ค. ๋ฌธ์์ด์ ์ต๋ ๊ธธ์ด๋ ๊ธธ์ด์ผ 20~30์ ์ ๋๋ผ์ ์ถฉ๋ถํ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด ์ ๊ทผ๋ฒ์ ๋ฌธ์ ์ ์๊ตฌ์ฌํญ์ ์ ํฉํ๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ๋จํ๋ค.
'๐ฆ ํ๋ก๊ทธ๋๋จธ์ค > ๐๏ธ ์๊ณ ๋ฆฌ์ฆ ํ์ด(Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ํ๋ฐฐ์์ (0) | 2025.10.16 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ ๋ฐ๋จน๊ธฐ (0) | 2025.10.13 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ํ๋ฒ๊ฑฐ ๋ง๋ค๊ธฐ (0) | 2025.10.01 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ฌธ์์ด ๋๋๊ธฐ (0) | 2025.09.26 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋๋ง์ ์ํธ (0) | 2025.09.25 |