Programmers #30

์ด๊ฐ•์šฉยท2023๋…„ 8์›” 3์ผ

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
29/66

์‹คํŒจ์œจ

๐Ÿ“‘ ๋ฌธ1) ์Šˆํผ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž ์˜ค๋ ๋ฆฌ๋Š” ํฐ ๊ณ ๋ฏผ์— ๋น ์กŒ๋‹ค. ๊ทธ๋…€๊ฐ€ ๋งŒ๋“  ํ”„๋žœ์ฆˆ ์˜ค์ฒœ์„ฑ์ด ๋Œ€์„ฑ๊ณต์„ ๊ฑฐ๋’€์ง€๋งŒ, ์š”์ฆ˜ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์˜ ์ˆ˜๊ฐ€ ๊ธ‰๊ฐํ•œ ๊ฒƒ์ด๋‹ค. ์›์ธ์€ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์™€ ๊ธฐ์กด ์‚ฌ์šฉ์ž ์‚ฌ์ด์— ์Šคํ…Œ์ด์ง€ ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ํฐ ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ ๊ณ ๋ฏผ ํ•œ ๊ทธ๋…€๋Š” ๋™์ ์œผ๋กœ ๊ฒŒ์ž„ ์‹œ๊ฐ„์„ ๋Š˜๋ ค์„œ ๋‚œ์ด๋„๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์—ญ์‹œ ์Šˆํผ ๊ฐœ๋ฐœ์ž๋ผ ๋Œ€๋ถ€๋ถ„์˜ ๋กœ์ง์€ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ์‹คํŒจ์œจ์„ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์œ„๊ธฐ์— ๋น ์ง€๊ณ  ๋ง์•˜๋‹ค. ์˜ค๋ ๋ฆฌ๋ฅผ ์œ„ํ•ด ์‹คํŒจ์œจ์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•˜๋ผ.

  • ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•œ๋‹ค.
    • ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ–ˆ์œผ๋‚˜ ์•„์ง ํด๋ฆฌ์–ดํ•˜์ง€ ๋ชปํ•œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜ / ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ํ”Œ๋ ˆ์ด์–ด ์ˆ˜

์ „์ฒด ์Šคํ…Œ์ด์ง€์˜ ๊ฐœ์ˆ˜ N, ๊ฒŒ์ž„์„ ์ด์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋ฉˆ์ถฐ์žˆ๋Š” ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด stages๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์‹คํŒจ์œจ์ด ๋†’์€ ์Šคํ…Œ์ด์ง€๋ถ€ํ„ฐ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜๋ผ.


์ œํ•œ์‚ฌํ•ญ

  • ์Šคํ…Œ์ด์ง€์˜ ๊ฐœ์ˆ˜ N์€ 1 ์ด์ƒ 500 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.
  • stages์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 200,000 ์ดํ•˜์ด๋‹ค.
  • stages์—๋Š” 1 ์ด์ƒ N + 1 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค.
    • ๊ฐ ์ž์—ฐ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋„์ „ ์ค‘์ธ ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ๋‹จ, N + 1 ์€ ๋งˆ์ง€๋ง‰ ์Šคํ…Œ์ด์ง€(N ๋ฒˆ์งธ ์Šคํ…Œ์ด์ง€) ๊นŒ์ง€ ํด๋ฆฌ์–ด ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋งŒ์•ฝ ์‹คํŒจ์œจ์ด ๊ฐ™์€ ์Šคํ…Œ์ด์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ์ž‘์€ ๋ฒˆํ˜ธ์˜ ์Šคํ…Œ์ด์ง€๊ฐ€ ๋จผ์ € ์˜ค๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค.
  • ์Šคํ…Œ์ด์ง€์— ๋„๋‹ฌํ•œ ์œ ์ €๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ 0 ์œผ๋กœ ์ •์˜ํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

Nstagesresult
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๋ฒˆ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 1 ๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 1/8

2๋ฒˆ ์Šคํ…Œ์ด์ง€์—๋Š” ์ด 7๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋„์ „ํ–ˆ์œผ๋ฉฐ, ์ด ์ค‘ 3๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ง ํด๋ฆฌ์–ดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2๋ฒˆ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 2 ๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 3/7

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚˜๋จธ์ง€ ์Šคํ…Œ์ด์ง€์˜ ์‹คํŒจ์œจ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 3 ๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 2/4
  • 4๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 1/2
  • 5๋ฒˆ ์Šคํ…Œ์ด์ง€ ์‹คํŒจ์œจ : 0/1

๊ฐ ์Šคํ…Œ์ด์ง€์˜ ๋ฒˆํ˜ธ๋ฅผ ์‹คํŒจ์œจ์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • [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 ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์‹œ์˜ค.


์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค number โ‰ค 100,000
  • 2 โ‰ค limit โ‰ค 100
  • 1 โ‰ค power โ‰ค limit

์ž…์ถœ๋ ฅ ์˜ˆ

numberlimitpowerresult
53210
103221

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • 1๋ถ€ํ„ฐ 5๊นŒ์ง€์˜ ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์ˆœ์„œ๋Œ€๋กœ [1, 2, 2, 3, 2]๊ฐœ์ž…๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ณต๊ฒฉ๋ ฅ ์ œํ•œ ์ˆ˜์น˜์ธ 3์„ ๋„˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ์ฒ ์˜ ๋ฌด๊ฒŒ๋Š” ํ•ด๋‹น ์ˆ˜๋“ค์˜ ํ•ฉ์ธ 10์ด ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 10์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • 1๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์•ฝ์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์ˆœ์„œ๋Œ€๋กœ [1, 2, 2, 3, 2, 4, 2, 4, 3, 4]๊ฐœ์ž…๋‹ˆ๋‹ค. ๊ณต๊ฒฉ๋ ฅ์˜ ์ œํ•œ์ˆ˜์น˜๊ฐ€ 3์ด๊ธฐ ๋•Œ๋ฌธ์—, 6, 8, 10๋ฒˆ ๊ธฐ์‚ฌ๋Š” ๊ณต๊ฒฉ๋ ฅ์ด 2์ธ ๋ฌด๊ธฐ๋ฅผ ๊ตฌ๋งคํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์ˆ˜๋“ค์˜ ํ•ฉ์ธ 21์„ return ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์˜ ํ’€์ด

์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ์‹คํŒจํ•œ ๋กœ์ง

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๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ ๋‹ค์Œ ๊ทœ์น™์„ ๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ž์—ด์„ ์—ฌ๋Ÿฌ ๋ฌธ์ž์—ด๋กœ ๋ถ„ํ•ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๋จผ์ € ์ฒซ ๊ธ€์ž๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์ž๋ฅผ x๋ผ๊ณ  ํ•ฉ์‹œ๋‹ค.
  • ์ด์ œ ์ด ๋ฌธ์ž์—ด์„ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ฝ์–ด๋‚˜๊ฐ€๋ฉด์„œ, x์™€ x๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ธ€์ž๋“ค์ด ๋‚˜์˜จ ํšŸ์ˆ˜๋ฅผ ๊ฐ๊ฐ ์…‰๋‹ˆ๋‹ค. ์ฒ˜์Œ์œผ๋กœ ๋‘ ํšŸ์ˆ˜๊ฐ€ ๊ฐ™์•„์ง€๋Š” ์ˆœ๊ฐ„ ๋ฉˆ์ถ”๊ณ , ์ง€๊ธˆ๊นŒ์ง€ ์ฝ์€ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • s์—์„œ ๋ถ„๋ฆฌํ•œ ๋ฌธ์ž์—ด์„ ๋นผ๊ณ  ๋‚จ์€ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๋‚จ์€ ๋ถ€๋ถ„์ด ์—†๋‹ค๋ฉด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ๋‘ ํšŸ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ์—์„œ ๋” ์ด์ƒ ์ฝ์„ ๊ธ€์ž๊ฐ€ ์—†๋‹ค๋ฉด, ์—ญ์‹œ ์ง€๊ธˆ๊นŒ์ง€ ์ฝ์€ ๋ฌธ์ž์—ด์„ ๋ถ„๋ฆฌํ•˜๊ณ , ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์œ„ ๊ณผ์ •๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด๋“ค๋กœ ๋ถ„ํ•ดํ•˜๊ณ , ๋ถ„ํ•ดํ•œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•˜์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค s์˜ ๊ธธ์ด โ‰ค 10,000
  • s๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

sresult
"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 ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • 3 โ‰ค X, Y์˜ ๊ธธ์ด(์ž๋ฆฟ์ˆ˜) โ‰ค 3,000,000์ž…๋‹ˆ๋‹ค.
  • X, Y๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • X, Y์˜ ์ง๊ฟ์€ ์ƒ๋‹นํžˆ ํฐ ์ •์ˆ˜์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

XYresult
1002345-1
1002030450
10012345010
1232142531321
55251255552

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • X, Y์˜ ์ง๊ฟ์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "-1"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • X, Y์˜ ๊ณตํ†ต๋œ ์ˆซ์ž๋Š” 0์œผ๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ์ˆ˜์˜ ์ง๊ฟ์€ ์ •์ˆ˜ 0์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "0"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • X, Y์˜ ์ง๊ฟ์€ 10์ด๋ฏ€๋กœ, "10"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #4

  • X, Y์˜ ์ง๊ฟ์€ 321์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "321"์„ returnํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #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) ์นด์นด์˜คํ†ก์— ๋œฌ ๋„ค ๋ฒˆ์งธ ๋ณ„! ์‹ฌ์‹ฌํ•  ๋•? ์นด์นด์˜คํ†ก ๊ฒŒ์ž„๋ณ„~

์นด์นด์˜คํ†ก ๊ฒŒ์ž„๋ณ„์˜ ํ•˜๋ฐ˜๊ธฐ ์‹ ๊ทœ ์„œ๋น„์Šค๋กœ ๋‹คํŠธ ๊ฒŒ์ž„์„ ์ถœ์‹œํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์€ ๋‹คํŠธํŒ์— ๋‹คํŠธ๋ฅผ ์„ธ ์ฐจ๋ก€ ๋˜์ ธ ๊ทธ ์ ์ˆ˜์˜ ํ•ฉ๊ณ„๋กœ ์‹ค๋ ฅ์„ ๊ฒจ๋ฃจ๋Š” ๊ฒŒ์ž„์œผ๋กœ, ๋ชจ๋‘๊ฐ€ ๊ฐ„๋‹จํžˆ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
๊ฐ“ ์ž…์‚ฌํ•œ ๋ฌด์ง€๋Š” ์ฝ”๋”ฉ ์‹ค๋ ฅ์„ ์ธ์ •๋ฐ›์•„ ๊ฒŒ์ž„์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์ธ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์˜ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ๋‹คํŠธ ๊ฒŒ์ž„์€ ์ด 3๋ฒˆ์˜ ๊ธฐํšŒ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  2. ๊ฐ ๊ธฐํšŒ๋งˆ๋‹ค ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ ์ˆ˜๋Š” 0์ ์—์„œ 10์ ๊นŒ์ง€์ด๋‹ค.
  3. ์ ์ˆ˜์™€ ํ•จ๊ป˜ Single(S), Double(D), Triple(T) ์˜์—ญ์ด ์กด์žฌํ•˜๊ณ  ๊ฐ ์˜์—ญ ๋‹น์ฒจ ์‹œ ์ ์ˆ˜์—์„œ 1์ œ๊ณฑ, 2์ œ๊ณฑ, 3์ œ๊ณฑ (์ ์ˆ˜1 , ์ ์ˆ˜2 , ์ ์ˆ˜3 )์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  4. ์˜ต์…˜์œผ๋กœ ์Šคํƒ€์ƒ() , ์•„์ฐจ์ƒ(#)์ด ์กด์žฌํ•˜๋ฉฐ ์Šคํƒ€์ƒ() ๋‹น์ฒจ ์‹œ ํ•ด๋‹น ์ ์ˆ˜์™€ ๋ฐ”๋กœ ์ „์— ์–ป์€ ์ ์ˆ˜๋ฅผ ๊ฐ 2๋ฐฐ๋กœ ๋งŒ๋“ ๋‹ค. ์•„์ฐจ์ƒ(#) ๋‹น์ฒจ ์‹œ ํ•ด๋‹น ์ ์ˆ˜๋Š” ๋งˆ์ด๋„ˆ์Šค๋œ๋‹ค.
  5. ์Šคํƒ€์ƒ()์€ ์ฒซ ๋ฒˆ์งธ ๊ธฐํšŒ์—์„œ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ์Šคํƒ€์ƒ()์˜ ์ ์ˆ˜๋งŒ 2๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 4๋ฒˆ ์ฐธ๊ณ )
  6. ์Šคํƒ€์ƒ()์˜ ํšจ๊ณผ๋Š” ๋‹ค๋ฅธ ์Šคํƒ€์ƒ()์˜ ํšจ๊ณผ์™€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ค‘์ฒฉ๋œ ์Šคํƒ€์ƒ(*) ์ ์ˆ˜๋Š” 4๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 4๋ฒˆ ์ฐธ๊ณ )
  7. ์Šคํƒ€์ƒ(*)์˜ ํšจ๊ณผ๋Š” ์•„์ฐจ์ƒ(#)์˜ ํšจ๊ณผ์™€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ค‘์ฒฉ๋œ ์•„์ฐจ์ƒ(#)์˜ ์ ์ˆ˜๋Š” -2๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 5๋ฒˆ ์ฐธ๊ณ )
  8. Single(S), Double(D), Triple(T)์€ ์ ์ˆ˜๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•œ๋‹ค.
  9. ์Šคํƒ€์ƒ(*), ์•„์ฐจ์ƒ(#)์€ ์ ์ˆ˜๋งˆ๋‹ค ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

0~10์˜ ์ •์ˆ˜์™€ ๋ฌธ์ž S, D, T, *, #๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋  ์‹œ ์ด์ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ผ.


์ž…๋ ฅ ํ˜•์‹

"์ ์ˆ˜|๋ณด๋„ˆ์Šค|[์˜ต์…˜]"์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด 3์„ธํŠธ.

์˜ˆ) 1S2D*3T

  • ์ ์ˆ˜๋Š” 0์—์„œ 10 ์‚ฌ์ด์˜ ์ •์ˆ˜์ด๋‹ค.
  • ๋ณด๋„ˆ์Šค๋Š” S, D, T ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • ์˜ต์„ ์€ *์ด๋‚˜ # ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์ถœ๋ ฅ ํ˜•์‹

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๋ฐฐ๋กœ ๋งŒ๋“œ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•จ. ์ด๋Š” ์ฒซ ๋ฒˆ์งธ ์ ์ˆ˜์˜ ๊ฒฝ์šฐ ์ด์ „ ์ ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ์ด์ „ ์ ์ˆ˜์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ์œ„ํ•จ์ด๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 8์›” 3์ผ

์ข‹์€ ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ