
๐ ๋ฌธ1) ์ํผ ๊ฒ์ ๊ฐ๋ฐ์ ์ค๋ ๋ฆฌ๋ ํฐ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ๊ทธ๋ ๊ฐ ๋ง๋ ํ๋์ฆ ์ค์ฒ์ฑ์ด ๋์ฑ๊ณต์ ๊ฑฐ๋์ง๋ง, ์์ฆ ์ ๊ท ์ฌ์ฉ์์ ์๊ฐ ๊ธ๊ฐํ ๊ฒ์ด๋ค. ์์ธ์ ์ ๊ท ์ฌ์ฉ์์ ๊ธฐ์กด ์ฌ์ฉ์ ์ฌ์ด์ ์คํ ์ด์ง ์ฐจ์ด๊ฐ ๋๋ฌด ํฐ ๊ฒ์ด ๋ฌธ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํ ๊น ๊ณ ๋ฏผ ํ ๊ทธ๋ ๋ ๋์ ์ผ๋ก ๊ฒ์ ์๊ฐ์ ๋๋ ค์ ๋์ด๋๋ฅผ ์กฐ์ ํ๊ธฐ๋ก ํ๋ค. ์ญ์ ์ํผ ๊ฐ๋ฐ์๋ผ ๋๋ถ๋ถ์ ๋ก์ง์ ์ฝ๊ฒ ๊ตฌํํ์ง๋ง, ์คํจ์จ์ ๊ตฌํ๋ ๋ถ๋ถ์์ ์๊ธฐ์ ๋น ์ง๊ณ ๋ง์๋ค. ์ค๋ ๋ฆฌ๋ฅผ ์ํด ์คํจ์จ์ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ผ.
์ ์ฒด ์คํ ์ด์ง์ ๊ฐ์ N, ๊ฒ์์ ์ด์ฉํ๋ ์ฌ์ฉ์๊ฐ ํ์ฌ ๋ฉ์ถฐ์๋ ์คํ ์ด์ง์ ๋ฒํธ๊ฐ ๋ด๊ธด ๋ฐฐ์ด stages๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์คํจ์จ์ด ๋์ ์คํ ์ด์ง๋ถํฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์คํ ์ด์ง์ ๋ฒํธ๊ฐ ๋ด๊ฒจ์๋ ๋ฐฐ์ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ๋ผ.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| N | stages | result |
|---|---|---|
| 5 | [2,1,2,6,2,4,3,3] | [3,4,2,1,5] |
| 4 | [4,4,4,4,4] | [4,1,2,3] |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
1๋ฒ ์คํ ์ด์ง์๋ ์ด 8๋ช ์ ์ฌ์ฉ์๊ฐ ๋์ ํ์ผ๋ฉฐ, ์ด ์ค 1๋ช ์ ์ฌ์ฉ์๊ฐ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ 1๋ฒ ์คํ ์ด์ง์ ์คํจ์จ์ ๋ค์๊ณผ ๊ฐ๋ค.
2๋ฒ ์คํ ์ด์ง์๋ ์ด 7๋ช ์ ์ฌ์ฉ์๊ฐ ๋์ ํ์ผ๋ฉฐ, ์ด ์ค 3๋ช ์ ์ฌ์ฉ์๊ฐ ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ 2๋ฒ ์คํ ์ด์ง์ ์คํจ์จ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋๋จธ์ง ์คํ ์ด์ง์ ์คํจ์จ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ ์คํ ์ด์ง์ ๋ฒํธ๋ฅผ ์คํจ์จ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
[3,4,2,1,5]์
์ถ๋ ฅ ์ #2
๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ง์ง๋ง ์คํ ์ด์ง์ ์์ผ๋ฏ๋ก 4๋ฒ ์คํ ์ด์ง์ ์คํจ์จ์ 1์ด๋ฉฐ ๋๋จธ์ง ์คํ ์ด์ง์ ์คํจ์จ์ 0์ด๋ค.
[4,1,2,3]๋์ ํ์ด
package programmers;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FailureRate {
public static int[] solution(int N, int[] stages) {
int totalUsers = stages.length;
int[] stageUserCount = new int[N + 2];
for (int stage : stages) {
stageUserCount[stage]++;
}
Map<Integer, Double> stageFailRates = new HashMap<>();
for (int i = 1; i <= N; i++) {
if (totalUsers != 0) {
double failRate = (double) stageUserCount[i] / totalUsers;
stageFailRates.put(i, failRate);
} else {
stageFailRates.put(i, 0.0);
}
totalUsers -= stageUserCount[i];
}
List<Map.Entry<Integer, Double>> entryList = new ArrayList<>(stageFailRates.entrySet());
entryList.sort(Map.Entry.<Integer, Double>comparingByValue().reversed().thenComparing(Map.Entry.comparingByKey()));
int[] answer = new int[N];
for (int i = 0; i < N; i++) {
answer[i] = entryList.get(i).getKey();
}
return answer;
}
public static void main(String[] args) {
solution(5, new int[] {2,1,2,6,2,4,3,3});
}
}
๋์ ์๊ฐ
int totalUsers = stages.length;
int[] stageUserCount = new int[N + 2];
for (int stage : stages) {
stageUserCount[stage]++;
}
๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋ int[] stages ๋ฅผ ๋ณด๋ฉด ํ์ฌ ๋จธ๋ฌผ๊ณ ์๋ ์คํ
์ด์ง๊ฐ ๋ํ๋๋ค. ์๋ฅผ๋ค์ด, {2,1,2,6,2,4,3,3} ์ด๋ผ๊ณ ํ ๋, 1๋ฒ์ ์ 2๋จ๊ณ, 2๋ฒ์ ์ 1๋จ๊ณ, 3๋ฒ์ ์ 2๋จ๊ณ, 4๋ฒ์ ์ 6๋จ๊ณ, 5๋ฒ์ ์ 2๋จ๊ณ, 6๋ฒ์ ์ 4๋จ๊ณ, 7๋ฒ์ ์ 3๋จ๊ณ, 8๋ฒ์ ์ 3๋จ๊ณ๋ฅผ ์๋ฏธํ๋๋ฐ, ๋จ๊ณ๋ณ ์ธ์์๋ฅผ ์ฒดํฌ๋ฅผ for๋ฌธ์ ํตํด ๋จ๊ณ๋ณ ์ธ์ ์๋ฅผ ์ฒดํฌํ ์ ์๋ค.

0๋จ๊ณ 0๋ช , 1๋จ๊ณ 1๋ช , 2๋จ๊ณ, 3๋ช , 3๋จ๊ณ 2๋ช , 4๋จ๊ณ 1๋ช , 5๋จ๊ณ 0๋ช , 6๋จ๊ณ 1๋ช ์ ์๋ฏธํ๋ค.
Map<Integer, Double> stageFailRates = new HashMap<>();
for (int i = 1; i <= N; i++) {
if (totalUsers != 0) {
double failRate = (double) stageUserCount[i] / totalUsers;
stageFailRates.put(i, failRate);
} else {
stageFailRates.put(i, 0.0);
}
totalUsers -= stageUserCount[i];
}
Map<Integer, Double> stageFailRates = new HashMap<>(); ์คํ
์ด์ง ๋ฒํธ๋ฅผ key๋ก, ํด๋น ์คํ
์ด์ง์ ์คํจ์จ์ value๋ก ํ๋ Map์ ์์ฑ, ๊ฐ ์คํ
์ด์ง๋ณ๋ก ์คํจ์จ์ ๊ณ์ฐํ๊ณ stageFailRates์ ์ ์ฅํ๋๋ฐ, ์คํจ์จ์ ํด๋น ์คํ
์ด์ง์ ๋๋ฌํ์ง๋ง, ์์ง ํด๋ฆฌ์ดํ์ง ๋ชปํ ํ๋ ์ด์ด์ ์๋ฅผ ํ์ฌ ์คํ
์ด์ง์ ๋๋ฌํ ํ๋ ์ด์ด ์๋ก ๋๋ ๊ฐ์ด๋ค.

List<Map.Entry<Integer, Double>> entryList = new ArrayList<>(stageFailRates.entrySet());
entryList.sort(Map.Entry.<Integer, Double>comparingByValue().reversed().thenComparing(Map.Entry.comparingByKey()));
List<Map.Entry<Integer, Double>> entryList = new ArrayList<>(stageFailRates.entrySet()); ๋ผ๊ณ ํ ๋, ์๋ฅผ๋ค์ด, stageFailRates๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๋ฉด:
{
1 -> 0.1,
2 -> 0.2,
3 -> 0.3,
4 -> 0.2
}
stageFailRates.entrySet()
[ 1=0.1, 2=0.2, 3=0.3, 4=0.2]
entryList.sort(Map.Entry.<Integer, Double>comparingByValue().reversed().thenComparing(Map.Entry.comparingByKey()));:
์ด ๋ถ๋ถ์ entryList๋ฅผ ์ ๋ ฌํ๋ ์ฝ๋๋ก
Map.Entry.<Interger, Double> comparingByValue() ๋ ์คํจ์จ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ Comparator๋ฅผ ์์ฑreversed()๋ ์์ฑ๋ Comparator๋ฅผ ๋ค์ง์ด ์คํจ์จ์ด ๋์ ์์๋๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํจthenComparing(Map.Entry.comparingByKey())๋ ์คํจ์จ์ด ๊ฐ์ ๊ฒฝ์ฐ ์คํ
์ด์ง ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํจ๋ฐ๋ผ์, ์ด ๋ก์ง์ ํตํด ์คํจ์จ์ด ๋์ ์คํ
์ด์ง๋ถํฐ, ๊ทธ๋ฆฌ๊ณ ์คํจ์จ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ ์คํ
์ด์ง ๋ฒํธ๊ฐ ์์ ์์๋ก entryList๊ฐ ์ ๋ ฌ๋จ

๐ ๋ฌธ2) ์ซ์๋๋ผ ๊ธฐ์ฌ๋จ์ ๊ฐ ๊ธฐ์ฌ์๊ฒ๋ 1๋ฒ๋ถํฐ number๊น์ง ๋ฒํธ๊ฐ ์ง์ ๋์ด ์์ต๋๋ค. ๊ธฐ์ฌ๋ค์ ๋ฌด๊ธฐ์ ์์ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ๋ ค๊ณ ํฉ๋๋ค.
๊ฐ ๊ธฐ์ฌ๋ ์์ ์ ๊ธฐ์ฌ ๋ฒํธ์ ์ฝ์ ๊ฐ์์ ํด๋นํ๋ ๊ณต๊ฒฉ๋ ฅ์ ๊ฐ์ง ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ๋ ค ํฉ๋๋ค. ๋จ, ์ด์๋๋ผ์์ ํ์ฝ์ ์ํด ๊ณต๊ฒฉ๋ ฅ์ ์ ํ์์น๋ฅผ ์ ํ๊ณ , ์ ํ์์น๋ณด๋ค ํฐ ๊ณต๊ฒฉ๋ ฅ์ ๊ฐ์ง ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํด์ผ ํ๋ ๊ธฐ์ฌ๋ ํ์ฝ๊ธฐ๊ด์์ ์ ํ ๊ณต๊ฒฉ๋ ฅ์ ๊ฐ์ง๋ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 15๋ฒ์ผ๋ก ์ง์ ๋ ๊ธฐ์ฌ๋จ์์ 15์ ์ฝ์๊ฐ 1, 3, 5, 15๋ก 4๊ฐ ์ด๋ฏ๋ก, ๊ณต๊ฒฉ๋ ฅ์ด 4์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํฉ๋๋ค. ๋ง์ฝ, ์ด์๋๋ผ์์ ํ์ฝ์ผ๋ก ์ ํด์ง ๊ณต๊ฒฉ๋ ฅ์ ์ ํ์์น๊ฐ 3์ด๊ณ ์ ํ์์น๋ฅผ ์ด๊ณผํ ๊ธฐ์ฌ๊ฐ ์ฌ์ฉํ ๋ฌด๊ธฐ์ ๊ณต๊ฒฉ๋ ฅ์ด 2๋ผ๋ฉด, 15๋ฒ์ผ๋ก ์ง์ ๋ ๊ธฐ์ฌ๋จ์์ ๋ฌด๊ธฐ์ ์์ ๊ณต๊ฒฉ๋ ฅ์ด 2์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํฉ๋๋ค. ๋ฌด๊ธฐ๋ฅผ ๋ง๋ค ๋, ๋ฌด๊ธฐ์ ๊ณต๊ฒฉ๋ ฅ 1๋น 1kg์ ์ฒ ์ด ํ์ํฉ๋๋ค. ๊ทธ๋์ ๋ฌด๊ธฐ์ ์์ ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ฒ ์ ๋ฌด๊ฒ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๋ ค ํฉ๋๋ค.
๊ธฐ์ฌ๋จ์์ ์๋ฅผ ๋ํ๋ด๋ ์ ์ number์ ์ด์๋๋ผ์ ํ์ฝ์ผ๋ก ์ ํด์ง ๊ณต๊ฒฉ๋ ฅ์ ์ ํ์์น๋ฅผ ๋ํ๋ด๋ ์ ์ limit์ ์ ํ์์น๋ฅผ ์ด๊ณผํ ๊ธฐ์ฌ๊ฐ ์ฌ์ฉํ ๋ฌด๊ธฐ์ ๊ณต๊ฒฉ๋ ฅ์ ๋ํ๋ด๋ ์ ์ power๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฌด๊ธฐ์ ์ ์ฃผ์ธ์ด ๋ฌด๊ธฐ๋ฅผ ๋ชจ๋ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ฒ ์ ๋ฌด๊ฒ๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์์ค.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| number | limit | power | result |
|---|---|---|---|
| 5 | 3 | 2 | 10 |
| 10 | 3 | 2 | 21 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์
์ถ๋ ฅ ์ #2
๋์ ํ์ด
์๊ฐ์ด๊ณผ๋ก ์คํจํ ๋ก์ง
package programmers;
public class TemplarsWeapon {
public static int solution(int number, int limit, int power) {
int answer = 0;
int[] divisors = new int[number];
for(int i = 1; i <= number; i++) {
int divisor = 0;
for(int j = 1; j <=i ; j++) {
if(i % j == 0) {
divisor++;
}
divisors[i-1] = divisor;
}
}
int cnt = 0;
for(int a : divisors) {
cnt++;
if(a > limit) {
a = power;
divisors[cnt-1] = a;
}
answer +=a;
}
System.out.println(answer);
return answer;
}
public static void main(String[] args) {
solution(10, 3, 2);
}
}
๋์ ์๊ฐ

์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ ๋ก์ง
package programmers;
public class TemplarsWeapon {
public static int solution(int number, int limit, int power) {
int answer = 0;
for(int i = 1; i <= number; i++) {
int divisor = 0;
int sqrt = (int)Math.sqrt(i);
for(int j = 1; j <= sqrt; j++) {
if( i % j == 0) {
divisor += (j == i / j) ? 1 : 2;
}
}
if(divisor > limit) {
answer += power;
} else {
answer += divisor;
}
}
return answer;
}
public static void main(String[] args) {
solution(10, 3, 2);
}
}
์๋ผํ ์คํ
๋ค์ค์ ์ฒด(Sieve of Eratosthenes) ๋ฐฉ์์ ๊ธฐ๋ฐ์ผ๋ก ํด๊ฒฐํ ๋ก์ง
class Solution {
public int solution(int number, int limit, int power) {
int[] count = new int[number + 1];
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= number / i; j++) {
count[i * j]++;
}
}
int answer = 0;
for (int i = 1; i <= number; i++) {
if (count[i] > limit) {
answer += power;
} else {
answer += count[i];
}
}
return answer;
}
}
๐ ๋ฌธ3) ๋ฌธ์์ด s๊ฐ ์ ๋ ฅ๋์์ ๋ ๋ค์ ๊ท์น์ ๋ฐ๋ผ์ ์ด ๋ฌธ์์ด์ ์ฌ๋ฌ ๋ฌธ์์ด๋ก ๋ถํดํ๋ ค๊ณ ํฉ๋๋ค.
๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ ๊ณผ์ ๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ค๋ก ๋ถํดํ๊ณ , ๋ถํดํ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ return ํ๋ ํจ์ solution์ ์์ฑํ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| s | result |
|---|---|
| "banana" | 3 |
| "abracadabra" | 6 |
| "aaabbaccccabba" | 3 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
s="banana"์ธ ๊ฒฝ์ฐ ba - na - na์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
์
์ถ๋ ฅ ์ #2
s="abracadabra"์ธ ๊ฒฝ์ฐ ab - ra - ca - da - br - a์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
์
์ถ๋ ฅ ์ #3
s="aaabbaccccabba"์ธ ๊ฒฝ์ฐ aaabbacc - ccab - ba์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
๋์ ์๊ฐ
package programmers;
public class StrSplit {
public static int solution(String s) {
int answer = 0;
int i = 0, j = 0, len = s.length();
int countTarget = 0, countOther = 0;
while (i < len && j < len) {
char target = s.charAt(i);
if (s.charAt(j) == target) {
countTarget++;
} else {
countOther++;
}
if (countTarget == countOther) {
answer++;
i = j + 1;
countTarget = 0;
countOther = 0;
}
j++;
}
if (i < len) answer++;
return answer;
}
public static void main(String[] args) {
solution("banana");
}
}
๐ ๋ฌธ4) ๋ ์ ์ X, Y์ ์์์ ์๋ฆฌ์์ ๊ณตํต์ผ๋ก ๋ํ๋๋ ์ ์ k(0 โค k โค 9)๋ค์ ์ด์ฉํ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์๋ฅผ ๋ ์์ ์ง๊ฟ์ด๋ผ ํฉ๋๋ค(๋จ, ๊ณตํต์ผ๋ก ๋ํ๋๋ ์ ์ ์ค ์๋ก ์ง์ง์ ์ ์๋ ์ซ์๋ง ์ฌ์ฉํฉ๋๋ค). X, Y์ ์ง๊ฟ์ด ์กด์ฌํ์ง ์์ผ๋ฉด, ์ง๊ฟ์ -1์ ๋๋ค. X, Y์ ์ง๊ฟ์ด 0์ผ๋ก๋ง ๊ตฌ์ฑ๋์ด ์๋ค๋ฉด, ์ง๊ฟ์ 0์ ๋๋ค.
์๋ฅผ ๋ค์ด, X = 3403์ด๊ณ Y = 13203์ด๋ผ๋ฉด, X์ Y์ ์ง๊ฟ์ X์ Y์์ ๊ณตํต์ผ๋ก ๋ํ๋๋ 3, 0, 3์ผ๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์์ธ 330์
๋๋ค. ๋ค๋ฅธ ์์๋ก X = 5525์ด๊ณ Y = 1255์ด๋ฉด X์ Y์ ์ง๊ฟ์ X์ Y์์ ๊ณตํต์ผ๋ก ๋ํ๋๋ 2, 5, 5๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์์ธ 552์
๋๋ค(X์๋ 5๊ฐ 3๊ฐ, Y์๋ 5๊ฐ 2๊ฐ ๋ํ๋๋ฏ๋ก ๋จ๋ 5 ํ ๊ฐ๋ ์ง ์ง์ ์ ์์ต๋๋ค.)
๋ ์ ์ X, Y๊ฐ ์ฃผ์ด์ก์ ๋, X, Y์ ์ง๊ฟ์ returnํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
์
์ถ๋ ฅ ์
| X | Y | result |
|---|---|---|
100 | 2345 | -1 |
100 | 203045 | 0 |
100 | 123450 | 10 |
12321 | 42531 | 321 |
5525 | 1255 | 552 |
์
์ถ๋ ฅ ์ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์
์ถ๋ ฅ ์ #2
์
์ถ๋ ฅ ์ #3
์
์ถ๋ ฅ ์ #4
์
์ถ๋ ฅ ์ #5
๋์ ํ์ด
package programmers;
import java.util.Arrays;
public class NumberPair {
public static String solution(String X, String Y) {
int[] countX = new int[10];
int[] countY = new int[10];
int[] countPair = new int[10];
for (char c : X.toCharArray()) {
countX[c - '0']++;
}
for (char c : Y.toCharArray()) {
countY[c - '0']++;
}
for (int i = 0; i <= 9; i++) {
countPair[i] = Math.min(countX[i], countY[i]);
}
StringBuilder pair = new StringBuilder();
for (int i = 9; i >= 0; i--) {
for (int j = 0; j < countPair[i]; j++) {
System.out.println(j);
pair.append(i);
}
}
if (pair.length() == 0) {
return "-1";
}
boolean isOnlyZero = true;
for (char c : pair.toString().toCharArray()) {
if (c != '0') {
isOnlyZero = false;
break;
}
}
if (isOnlyZero) {
return "0";
}
int startIndex = 0;
while (pair.charAt(startIndex) == '0') {
startIndex++;
}
return pair.substring(startIndex);
}
public static void main(String[] args) {
solution("5525", "1255");
}
}
๐ ๋ฌธ5) ์นด์นด์คํก์ ๋ฌ ๋ค ๋ฒ์งธ ๋ณ! ์ฌ์ฌํ ๋? ์นด์นด์คํก ๊ฒ์๋ณ~

์นด์นด์คํก ๊ฒ์๋ณ์ ํ๋ฐ๊ธฐ ์ ๊ท ์๋น์ค๋ก ๋คํธ ๊ฒ์์ ์ถ์ํ๊ธฐ๋ก ํ๋ค. ๋คํธ ๊ฒ์์ ๋คํธํ์ ๋คํธ๋ฅผ ์ธ ์ฐจ๋ก ๋์ ธ ๊ทธ ์ ์์ ํฉ๊ณ๋ก ์ค๋ ฅ์ ๊ฒจ๋ฃจ๋ ๊ฒ์์ผ๋ก, ๋ชจ๋๊ฐ ๊ฐ๋จํ ์ฆ๊ธธ ์ ์๋ค.
๊ฐ ์
์ฌํ ๋ฌด์ง๋ ์ฝ๋ฉ ์ค๋ ฅ์ ์ธ์ ๋ฐ์ ๊ฒ์์ ํต์ฌ ๋ถ๋ถ์ธ ์ ์ ๊ณ์ฐ ๋ก์ง์ ๋งก๊ฒ ๋์๋ค. ๋คํธ ๊ฒ์์ ์ ์ ๊ณ์ฐ ๋ก์ง์ ์๋์ ๊ฐ๋ค.
0~10์ ์ ์์ ๋ฌธ์ S, D, T, *, #๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ด ์ ๋ ฅ๋ ์ ์ด์ ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์์ฑํ๋ผ.
์
๋ ฅ ํ์
"์ ์|๋ณด๋์ค|[์ต์ ]"์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด 3์ธํธ.
์) 1S2D*3T
์ถ๋ ฅ ํ์
3๋ฒ์ ๊ธฐํ์์ ์ป์ ์ ์ ํฉ๊ณ์ ํด๋นํ๋ ์ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์) 37
์
์ถ๋ ฅ ์์

๋์ ํ์ด
package programmers;
import java.util.Arrays;
public class DartGame {
public static int solution(String dartResult) {
int[] score = new int[3];
int index = -1;
for(int i = 0; i < dartResult.length(); i++) {
char c = dartResult.charAt(i);
if(Character.isDigit(c)) {
index++;
if(c == '1' && dartResult.charAt(i+1) == '0') {
score[index] = 10;
i++;
}else {
score[index] = Character.getNumericValue(c);
}
}else if(c =='D') {
score[index] = (int)Math.pow(score[index],2);
}else if(c =='T') {
score[index] = (int)Math.pow(score[index], 3);
}else if(c =='*') {
if(index > 0) {
score[index - 1] *= 2;
}
score[index] *= 2;
}else if(c =='#') {
score[index] *= -1;
}
}
return score[0] + score[1] + score[2];
}
public static void main(String[] args) {
solution("1S*2T*3S");
}
}
๋์ ์๊ฐ
๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋ dartResult ๋ฅผ ํ๊ธ์ ์ฉ ์งค๋ผ String ๋งค๊ฐ๋ณ์ dartResult์ ๋จผ์ ์ซ์๊ฐ ํฌํจ๋ผ์๋์ง ๋จผ์ ํ์ธํ๋ค. ๋ง์ฝ, ์ซ์๊ฐ ์กด์ฌํ๋ฉด index++ ๋ฅผ ์งํํ๋๋ฐ,
๋งค๊ฐ๋ณ์์๋ ์ซ์๊ฐ 3๊ฐ๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์, int[] score = new int[3]์ผ๋ก ํฌ๊ธฐ๋ฅผ ์ค์ ํ์ฌ index๋ฅผ ํ ๋นํ๋ค.
if(c == '1' && dartResult.charAt(i+1) == '0') {
score[index] = 10;
i++;
}else {
score[index] = Character.getNumericValue(c);
}
ํด๋น ๋ก์ง์ ํตํด, ์ซ์๊ฐ 1~10 ๊น์ง ์กด์ฌํ๊ธฐ๋๋ฌธ์, ์ซ์ 10์ ๊ฒ์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฌ์ ๋ฌธ์๊ฐ 1 & ๋ค์ ๋ฌธ์๊ฐ 0์ด๋ฉด 10์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์, ํด๋นํ๋ score[index] ๊ฐ์ 10์ ์ถ๊ฐ์ํจ๋ค. ๊ทธ๋ ์ง์์ผ๋ฉด, ํด๋น ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ฐ๊พธ๋ Character.getNumericValue๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ score[index] ์ ๋ด๋๋ค.
else if(c =='D') {
score[index] = (int)Math.pow(score[index],2);
}else if(c =='T') {
score[index] = (int)Math.pow(score[index], 3);
}else if(c =='*') {
if(index > 0) {
score[index - 1] *= 2;
}
score[index] *= 2;
}else if(c =='#') {
score[index] *= -1;
}
c == 'S' ๋ ํด๋นํ๋ ์ซ์์ *1์ ์๋ฏธํ๊ธฐ ๋๋ฌธ์, Double, Triple๋ง ์ฒดํฌ ํ๋ค. ๊ทธ๋ฆฌ๊ณ *, # ๋ฅผ ์ฒดํฌํ์ฌ ์ต์
์ด ๋ฐ์ํ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. *๊ฐ ๋์ฌ ๊ฒฝ์ฐ ํ์ฌ ์ ์ score[index]๋ฅผ 2๋ฐฐ๋ก ๋ง๋ค๊ณ , ๋ง์ฝ ์ด์ ์ ์ score[index -1]์ด ์กด์ฌํ๋ค๋ฉด ์ด์ ์ ์๋ 2๋ฐฐ๋ก ๋ง๋ฆ. ์กฐ๊ฑด๋ฌธ if (index > 0) ์ index๊ฐ 0๋ณด๋ค ํด ๊ฒฝ์ฐ์๋ง ์ด์ ์ ์๋ฅผ 2๋ฐฐ๋ก ๋ง๋๋ ์ฒ๋ฆฌ๋ฅผ ํจ. ์ด๋ ์ฒซ ๋ฒ์งธ ์ ์์ ๊ฒฝ์ฐ ์ด์ ์ ์๊ฐ ์์ผ๋ฏ๋ก, ์ด์ ์ ์์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋๋ก ํ๊ธฐ์ํจ์ด๋ค.
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค.