Programmers #11

์ด๊ฐ•์šฉยท2023๋…„ 4์›” 13์ผ
1

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
11/58

k์˜ ๊ฐœ์ˆ˜

๐Ÿ“‘ ๋ฌธ1) 1๋ถ€ํ„ฐ 13๊นŒ์ง€์˜ ์ˆ˜์—์„œ, 1์€ 1, 10, 11, 12, 13 ์ด๋ ‡๊ฒŒ ์ด 6๋ฒˆ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ i, j, k๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, i๋ถ€ํ„ฐ j๊นŒ์ง€ k๊ฐ€ ๋ช‡ ๋ฒˆ ๋“ฑ์žฅํ•˜๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ž…์ถœ๋ ฅ ์˜ˆ

ijkresult
11316
105055
31020

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

  • 10๋ถ€ํ„ฐ 50๊นŒ์ง€ 5๋Š” 15, 25, 35, 45, 50 ์ด 5๋ฒˆ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 5๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.
  • 3๋ถ€ํ„ฐ 10๊นŒ์ง€ 2๋Š” ํ•œ ๋ฒˆ๋„ ๋“ฑ์žฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ 0์„ return ํ•ฉ๋‹ˆ๋‹ค.

package programmers;

public class KNumber {
	public static int solution(int i, int j, int k) {
        int answer = 0;
        String intStr = "";
        String convert = Integer.toString(k);
        
        for(int v = i; v <=j; v++) {
        	intStr +=Integer.toString(v);	
        }
        String[] strArr = intStr.split("");

        
        for(int z = 0; z < strArr.length; z++) {
        	if(strArr[z].equals(convert)) {
        		answer++;
        	}
        }
        return answer;
    }
	
	public static void main(String[] args) {
		solution(1,13,1);
	}
}

๋‚˜์˜ ์ƒ๊ฐ

ํ•ญ์ƒ ํ‹€์— ๊ฐ‡ํžŒ ์ƒ๊ฐ์„ ํ•˜๋Š”๋ฐ ์ด ๋ฌธ์ œ ์—ญ์‹œ, ์ˆซ์ž๋กœ๋งŒ ์ƒ๊ฐํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํŒ๋ณ„ํ• ๊ฒƒ์ธ๊ฐ€๋ฅผ ์˜ค๋ž˜ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ฌธ์ œ์ธ๊ฑฐ ๊ฐ™๋‹ค. ๋ฌธ์ œ์˜ ์‹ค๋งˆ๋ฆฌ๋Š” intํ˜• ๋ณ€์ˆ˜๋ฅผ ๋ฌธ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ํŠน์ • ๋ฌธ์ž๋ฅผ ๊ฒ€์ถœํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚˜๋Š” for๋ฌธ์„ ํ†ตํ•ด, String intStr์— Integer์„ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” toString ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ intStr์— ๋„ฃ๊ณ  intStr์„ split("")๋ฅผ ์ด์šฉํ•˜์—ฌ String ๋ฐฐ์—ด strArr์— ๋‹ค์‹œ ๋„ฃ๊ณ , ํ•œ๊ธ€์ž ํ•œ๊ธ€์ž๋ฅผ ํŠน์ • ๋ฌธ์ž์™€ ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์œผ๋ฉด answer++ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.


๊ฐ€๊นŒ์šด ์ˆ˜

๐Ÿ“‘ ๋ฌธ2) ์ •์ˆ˜ ๋ฐฐ์—ด array์™€ ์ •์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, array์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜ ์ค‘ n๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ž…์ถœ๋ ฅ ์˜ˆ

arraynresult
[3,10,28]2028
[10,11,12]1312

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

  • 3, 10, 28 ์ค‘ 20๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜๋Š” 28์ž…๋‹ˆ๋‹ค.
  • 10, 11, 12 ์ค‘ 13๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜๋Š” 12์ž…๋‹ˆ๋‹ค.
  • ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ ๋” ์ž‘์€ ์ˆ˜๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

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

package ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค;

public class NearestNumber {
	public static int solution(int[] array, int n) {
       
        int index = 0;
        int[] abs = new int[array.length];
        
        for(int i = 0; i < array.length; i++) {
        	abs[i] = Math.abs(array[i] - n);
        }
        
        int min = abs[0];
        for(int i = 1; i < abs.length; i++) {
        	if(abs[i] < min) {
        		min = abs[i];
        		index = i;
        	}else if(abs[i] == min) {
        		if(array[i] < array[index]) {  
        	        index = i;
        	    }
        	}
  
        }
        return array[index];
    }
	
	public static void main(String[] args) {
		
		int[] array = {3,10,28};
		
		solution(array,20);
	}
}

๋‚˜์˜ ์ƒ๊ฐ

๋ถ„๋ช… ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ... ์ด๊ฑฐ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹๊บผ์•ผ... ํ•˜๋ฉด์„œ ์ผ๋‹จ ์ผ€์ด์Šค ๋‹ค ๋Œ๋ฆฌ๊ณ  ์ œ์ถœ ๋ฒ„ํŠผ ํด๋ฆญ.... ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ œ ๋ด์•ผ์ง€ ํ–ˆ๋Š”๋ฐ... ๋ฌด๋ ค 13์ ์ด๋‚˜ ํš๋“...(?) ๋ญ์ง€...??

๋จผ์ €, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„๊นŒ ๊ณ ๋ฏผ๋ฅผ ํ•˜๋‹ค "for๋ฌธ์„ ํ†ตํ•ด ๋ฐฐ์—ด์„ ๋Œ๋ ค ํ•ด๋‹น ์ธ๋ฑ์Šค ๊ฐ’๊ณผ ๋งค๊ฐœ ๋ณ€์ˆ˜ n์˜ ์ฐจ๋ฅผ ์ ˆ๋Œ€๊ฐ’์œผ๋กœ ๊ตฌํ•˜๋ฉด ์ˆ˜์น˜ํ™” ์‹œํ‚ฌ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ" ๋ผ๋Š” ์ƒ๊ฐ์„ ๋จผ์ €ํ•จ....

์ ˆ๋Œ€๊ฐ’์œผ๋กœ ๋จผ์ €, ํฌ๊ธฐ๋ฅผ ๊ตฌํ•˜์—ฌ, ํฌ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€๊ฒŒ ๋งค๊ฐœ๋ณ€์ˆ˜ n๊ณผ ๊ฐ€์žฅ ๊ฐ€๊น๊ฒ ๊ตฌ๋‚˜!!! ํ•˜๊ณ  ์ œ์ถœ ๋ฒ„ํŠผ ํด๋ฆญ... ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋ ‡์ง€.... ๋ฐ˜๋ก€๋Š” ๋Š˜... ๋‚˜์˜ ๊ณ์— ์กด์žฌํ•œ๋‹ค....์—ฌ๊ธฐ์„œ ๋” ๊ณ ๋ฏผ ํ–ˆ๋˜ ๊ฒฝ์šฐ๋Š”

solution([12, 3, 4, 10, 13], 11)

abs[i] = Math.abs(array[i] - n);

  • 12 - 11 = |1| = 1
  • 3 - 11 = |-8| = 8
  • 4 - 11 = |-7| = 7
  • 10 - 11 = |-1| = 1
  • 13 - 11 = |2| = 2

1,8,7,1,2 ์ˆซ์ž ์ค‘์— ์–ด๋–ค ์ˆ˜๊ฐ€ 11๊ณผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šธ๊นŒ??? ์—์„œ

12,10 ๋ชจ๋‘ ์ ˆ๋Œ€๊ฐ’์„ ๊ตฌํ•˜์˜€์„๋•Œ ๊ทธ ์ฐจ๊ฐ€ 1์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๊ฒฝ์šฐ ๋ฌธ์ œ์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ ๋” ์ž‘์€ ์ˆ˜๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค. ๋ฅผ ์กฐ๊ฑด์„ ๊ฑธ์–ด ํ•œ๋ฒˆ๋” ํŒ๋ณ„์„ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋•Œ๋ฌธ์—

for(int i = 1; i < abs.length; i++) {
        	if(abs[i] < min) {
        		min = abs[i];
        		index = i;
        	}else if(abs[i] == min) {
        		if(array[i] < array[index]) {  
        	        index = i;
        	    }
        	}
  
        }
  • abs = {1,8,7,1,2} ์ด๊ณ  min๊ฐ’์€ 1์ธ index๋Š” 0์ด ๋œ๋‹ค, ๋‘ ๋ฒˆ์งธ 1์€ , index 3
  • for๋ฌธ์„ ๋Œ๋ ค, abs[i] == 1 ์ฆ‰, i = 3 ์ผ๋•Œ min๊ฐ’๊ณผ ๊ฐ™์•„์ง„๋‹ค.
  • if(array[3] = 10 < array[0] = 12) ์ด๋ฉด, index = 3์ด ๋“ค์–ด๊ฐ„๋‹ค.
  • ๋”ฐ๋ผ์„œ, return array[index] ์—์„œ array[3] = 10 ์„ ๋ฆฌํ„ดํ•˜๊ฒŒ ๋œ๋‹ค.

์ง„๋ฃŒ ์ˆœ์„œ ์ •ํ•˜๊ธฐ

๐Ÿ“‘ ๋ฌธ3) ์™ธ๊ณผ์˜์‚ฌ ๋จธ์“ฑ์ด๋Š” ์‘๊ธ‰์‹ค์— ์˜จ ํ™˜์ž์˜ ์‘๊ธ‰๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง„๋ฃŒ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ ๋ฐฐ์—ด emergency๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์‘๊ธ‰๋„๊ฐ€ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ์ง„๋ฃŒ ์ˆœ์„œ๋ฅผ ์ •ํ•œ ๋ฐฐ์—ด์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ž…์ถœ๋ ฅ ์˜ˆ

emergencyresult
[3, 76, 24][3, 1, 2]
[1, 2, 3, 4, 5, 6, 7][7, 6, 5, 4, 3, 2, 1]
[30, 10, 23, 6, 100][2, 4, 3, 5, 1]

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

  • emergency๊ฐ€ [3, 76, 24]์ด๋ฏ€๋กœ ์‘๊ธ‰๋„์˜ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด [3, 1, 2]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.
  • emergency๊ฐ€ [1, 2, 3, 4, 5, 6, 7]์ด๋ฏ€๋กœ ์‘๊ธ‰๋„์˜ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด [7, 6, 5, 4, 3, 2, 1]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.
  • emergency๊ฐ€ [30, 10, 23, 6, 100]์ด๋ฏ€๋กœ ์‘๊ธ‰๋„์˜ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด [2, 4, 3, 5, 1]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

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

package ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค;

import java.util.Arrays;

public class Emergency {
	
	public static int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        int[] down = new int[emergency.length];
        
        for(int i = 0; i < emergency.length; i++) {
        	down[i] = emergency[i];
        }
        Arrays.sort(down);
        
        for(int i = 0; i < emergency.length; i++) {
        	for(int j = 0; j < emergency.length;j++) {
        		if(down[i] == emergency[j]) {
        			answer[j] = emergency.length-i;
        		}
        	}
        }
        
        return answer;
    }
	
	public static void main(String[] args) {
		
		int[] emergency = {30, 10, 23, 6, 100};
		
		solution(emergency);
	}

}

๋‚˜์˜ ์ƒ๊ฐ

int[] ๋ฐฐ์—ด down ์„ ์ด์šฉํ•˜์—ฌ emergency ๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•จ, Arrays.sort(down) ์„ ์“ฐ๋ฉด ์ •๋ ฌ์ด ๋œ๋‹ค.

for(int i = 0; i < emergency.length; i++) {
    down[i] = emergency[i];
}
Arrays.sort(down);

emergency ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ์›์†Œ์— ๋Œ€ํ•ด ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ down ๋ฐฐ์—ด์—์„œ์˜ index๋ฅผ ์ฐพ์•„ answer ๋ฐฐ์—ด์˜ ํ•ด๋‹น index ์œ„์น˜์— ์ €์žฅ, ์ด๋•Œ emergency ๋ฐฐ์—ด๊ณผ down ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ index๋ฅผ ์ฐพ์Œ

for(int i = 0; i < emergency.length; i++) {
    for(int j = 0; j < emergency.length;j++) {
        if(down[i] == emergency[j]) {
            answer[j] = emergency.length-i;
        }
    }
}

์ด ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ–ˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ, ์ •๋ ฌ๊นŒ์ง€์•ผ ์‰ฝ๊ฒŒ ํ–ˆ์ง€๋งŒ, ์šฐ์„ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚˜ํƒ€๋‚ด๊ณ , ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ์ถœ๋ ฅ์ด ์•„๋‹Œ, ์›๋ž˜ ๋ฐฐ์—ด์˜ ์œ„์น˜์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋„ฃ์„๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ณ ๋ฏผ ๋งŽ์ด ํ–ˆ๋˜๊ฑฐ ๊ฐ™๋‹ค. ํ•ด๊ฒฐ์„ ์œ„ํ•ด Map์—๋‹ค๊ฐ€ key์™€ valueํ˜•ํƒœ๋กœ ๋„ฃ์–ด์•ผ ๊ฒ ๋‹ค ๊นŒ์ง€ ์ ‘๊ทผ ํ–ˆ์œผ๋‚˜, ๋„๋ฌด์ง€ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ์ด์ค‘ for๋ฌธ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.


๋‚ด๊ฐ€ ํ’€๊ณ ์ž ํ–ˆ๋˜ ๋ฐฉ๋ฒ•

import java.util.*;
class Solution {
    public int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        int[] sort = Arrays.copyOf(emergency, emergency.length);
        Arrays.sort(sort);
        Map<Integer, Integer> rank = new HashMap<Integer, Integer>();
        int rankIdx = 1;
        for (int idx = sort.length - 1; idx >= 0; idx--) {
            rank.put(sort[idx], rankIdx++);
        }
        for (int idx = 0; idx < emergency.length; idx++) {
            answer[idx] = rank.get(emergency[idx]);
        }
        return answer;
    }
}
int[] answer = new int[emergency.length];
int[] sort = Arrays.copyOf(emergency, emergency.length);
  • ์›๋ž˜์˜ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, sort ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜์—ฌ,
    Arrays.copyOf() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ๋ณต์‚ฌํ•  ํ•จ์ˆ˜์™€, ๋ณต์‚ฌํ•  ํ•จ์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
Map<Integer, Integer> rank = new HashMap<Integer, Integer>();
int rankIdx = 1;
for (int idx = sort.length - 1; idx >= 0; idx--) {
	rank.put(sort[idx], rankIdx++);
}
  • Map ์ž๋ฃŒํ˜• Integer ๋กœ ์„ ์–ธํ•œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„์˜ index ์˜ ์ดˆ๊ธฐ๊ฐ’์„ 1๋กœ ์„ ์–ธ
  • for๋ฌธ sort ๋ฐฐ์—ด์˜ ๋์ž๋ฆฌ sort.length-1 ๋ถ€ํ„ฐ 0๊นŒ์ง€ index๋ฅผ ๊ฐ์†Œ
  • Map rank ๋ณ€์ˆ˜์— put์— key ,value ๊ฐ’์„ ๊ฐ๊ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ(sort[idx]),rankIdx++ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
    -> ์ฆ‰, ์˜ค๋ฆ„์ฐจ์ˆœ์˜ ๋งจ๋งˆ์ง€๋ง‰ ๊ฐ’์ด rankIdx = 1์„ ์–ป๋Š”๋‹ค.
for (int idx = 0; idx < emergency.length; idx++) {
            answer[idx] = rank.get(emergency[idx]);
	}
        return answer;
  • ์ตœ์ข…์ ์œผ๋กœ, for๋ฌธ์„ ํ†ตํ•ด answer[idx] ๊ฐ’์— rank.get(emergency[idx]) ๋ฅผ ๋„ฃ๋Š”๋‹ค.

์˜ˆ์‹œ๋ฅผ ๋„ฃ์–ด ๋ณด์ž

  • emergency ๋ฐฐ์—ด์€ {30, 10, 23, 6, 100}
  • sort ๋ฐฐ์—ด์€ emergency ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์ด๋ฏ€๋กœ {30, 10, 23, 6, 100}
  • Arrays.sort(sort) ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ๋ฐฐ์—ด์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ {6,10,23,30,100}
  • ์—ญ์ˆœ for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉ sort๋ฐฐ์—ด์˜ ์š”์†Œ์™€ ์ˆœ์œ„๋ฅผ rank ๋งต์— ์ €์žฅ
    • rank ๋งต์— ์ €์žฅ๋˜๋Š” ์š”์†Œ : {100: 1, 30: 2, 23: 3, 10: 4, 6: 5}
  • emergency ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•œ ์ˆœ์œ„๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ answer ๋ฐฐ์—ด์— ์ˆœ์œ„๋ฅผ ์ €์žฅ
    • answer[0] = rank.get(30) = 2
    • answer[1] = rank.get(10) = 4
    • answer[2] = rank.get(23) = 3
    • answer[3] = rank.get(6) = 5
    • answer[4] = rank.get(100) = 1
  • ์ตœ์ข…์ ์œผ๋กœ answer ๋ฐฐ์—ด์„ {2, 4, 3, 5, 1} ์ด ๋œ๋‹ค.

์ˆจ์–ด์žˆ๋Š” ์ˆซ์ž์˜ ๋ง์…ˆ (2)

๐Ÿ“‘ ๋ฌธ4) ๋ฌธ์ž์—ด my_string์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. my_string์€ ์†Œ๋ฌธ์ž, ๋Œ€๋ฌธ์ž, ์ž์—ฐ์ˆ˜๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. my_string์•ˆ์˜ ์ž์—ฐ์ˆ˜๋“ค์˜ ํ•ฉ์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค my_string์˜ ๊ธธ์ด โ‰ค 1,000
  • 1 โ‰ค my_string ์•ˆ์˜ ์ž์—ฐ์ˆ˜ โ‰ค 1000
  • ์†๋œ ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ์ˆซ์ž๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.
  • 000123๊ณผ ๊ฐ™์ด 0์ด ์„ ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด์— ์ž์—ฐ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ 0์„ return ํ•ด์ฃผ์„ธ์š”.

์ž…์ถœ๋ ฅ ์˜ˆ

my_stringresult
"aAb1B2cC34oOp"37
"1a2b3c4d123Z"133

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

  • "aAb1B2cC34oOp"์•ˆ์˜ ์ž์—ฐ์ˆ˜๋Š” 1, 2, 34 ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1 + 2 + 34 = 37 ์„ returnํ•ฉ๋‹ˆ๋‹ค.
  • "1a2b3c4d123Z"์•ˆ์˜ ์ž์—ฐ์ˆ˜๋Š” 1, 2, 3, 4, 123 ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1 + 2 + 3 + 4 + 123 = 133 ์„ returnํ•ฉ๋‹ˆ๋‹ค.

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

package ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค;

public class HiddenNumbers {
	
	public static int solution(String my_string) {
	   
		int answer = 0;
		
		
		my_string = my_string.replaceAll("[^\\d]+", " ");
		String[] str = my_string.split(" ");

		for (int i = 0; i < str.length; i++) {
	        if (!str[i].isEmpty()) { // ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ์ˆซ์ž๋กœ ๋ณ€ํ™˜
	            int num = Integer.parseInt(str[i]);
	            answer += num;
	        }
	    }
	    return answer;
	}

	
	public static void main(String[] args) {
		solution("aAb1B2cC34oOp");
	}
}

๋‚˜์˜ ์ƒ๊ฐ

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€๋งŒ, ํ˜„์žฌ ๋‚˜์˜ ์ˆ˜์ค€์—์„œ ์ƒ๊ฐ๋‚ฌ๋˜ ๋ฐฉ๋ฒ•์€ ์ˆ˜์—… ์ค‘ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์—์„œ ๋นˆ๊ฐ’์ด๋‚˜, ํŠน์ • ๊ฐ’์„ ๋„ฃ์—ˆ์„๋•Œ ๊ฒ€์ถœ๋˜๋Š” ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅํ•˜๊ธฐ๋ฅผ ํ•˜๋ฉด์„œ ๋ฐฐ์› ๋˜ ์ •๊ทœํ‘œํ˜„์‹์ด ์ƒ๊ฐ๋‚ฌ๋‹ค. ์–ด๋ ดํ’‹์ด ์ƒ๊ฐ๋‚ฌ๊ธฐ์— ๋น„์Šทํ•œ ์˜ˆ์ œ๋ฅผ ๋จผ์ € ์ฐพ์•„๋ณด๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋Š”๋ฐ, ์ˆซ์ž๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ๊ฒ€์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• [^\\d]+ ์™€ ๋Œ€,์†Œ๋ฌธ์ž๋งŒ ๊ฒ€์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• [a-zA-Z] ์ •๊ทœํ‘œํ˜„์‹์ด ์žˆ๋‹ค๋Š”๊ฒƒ์„ ๋ณด๊ณ  ๋จผ์ € [^\\d]+ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. my_string์„ replaceAll ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ [^\\d]+ ๋ฅผ " " ์œผ๋กœ ๋ฐ”๊พธ์–ด, String[] ๋ฐฐ์—ด str์— ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฌธ์ž๋ฅผ ๋„ฃ๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  for๋ฌธ์„ ๋Œ๋ ค str[i].isEmpty() ์ฆ‰, ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋งŒ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ, intํ˜• answer๋ณ€์ˆ˜์— ๋”ํ•ด์ค€๋‹ค.

  • ์ •๊ทœํ‘œํ˜„์‹
ํŒจํ„ด์„ค๋ช…ํŒจํ„ด์„ค๋ช…
^์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด.์–ด๋–ค ํ•œ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด
$๋์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด\d์ˆซ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด (digit)
\D์ˆซ์ž ์ด์™ธ์˜ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด\w์ˆซ์ž์™€ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด (word)
\W์ˆซ์ž์™€ ๋ฌธ์ž ์ด์™ธ์˜ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด\s๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด (space)
[abc]a, b, c ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด\S๊ณต๋ฐฑ ๋ฌธ์ž ์ด์™ธ์˜ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด
[^abc]a, b, c ์ด์™ธ์˜ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด[a-z]a๋ถ€ํ„ฐ z๊นŒ์ง€์˜ ์•ŒํŒŒ๋ฒณ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด
[0-9]0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด|or ์—ฐ์‚ฐ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด
()๊ทธ๋ฃน์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŒจํ„ด

๋‹ค๋ฅธ ํ’€์ด ๋ฒ•

  • ์ž๋ฐ” ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ด์šฉํ•œ ํ’€์ด๋ฒ•
package ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HiddenNumbers {
	
	public static int solution(String my_string) {
	   
		int answer = 0;
		Pattern pattern = Pattern.compile("\\d+");
	    Matcher matcher = pattern.matcher(my_string);
		
		while (matcher.find()) { // ์ˆซ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ฐ˜๋ณต
	        int num = Integer.parseInt(matcher.group());
	        answer += num;
	    }
		System.out.println(answer);
	    return answer;
	}

	
	public static void main(String[] args) {
		solution("aAb1B2cC34oOp");
	}
}

์‹ฌํ”Œ ์ฝ”๋“œ

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        String[] str = my_string.split("[a-zA-Z]");
        for(int i = 0 ; i < str.length;i++){
            if(str[i].length() > 0)
                answer+=Integer.parseInt(str[i]);
        }
        return answer;
    }
}

์ฝ”๋“œ ํ•ด์„

  • ๋Œ€,์†Œ๋ฌธ์ž๋ฅผ ๊ฒ€์ถœํ•˜๋Š” ์ •๊ทœ์‹ [a-zA-Z] ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”๋กœ String[] str์— ๋„ฃ๋Š”๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด, str[i].length() > 0 ๋นˆ๊ฐ’์ด๋ฉด ๋„˜์–ด๊ฐ€๊ณ , ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด, answer += Integer.parseInt(str[i])๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•„์ฃผ ์‹ฌํ”Œํ•˜๊ฒŒ ๊ณ„์‚ฐ

ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•œ ๋ฌธ์ž

๐Ÿ“‘ ๋ฌธ5) ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. s์—์„œ ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋ฌธ์ž์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด๋ณด์„ธ์š”. ํ•œ ๋ฒˆ๋งŒ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋นˆ ๋ฌธ์ž์—ด์„ return ํ•ฉ๋‹ˆ๋‹ค.


์ž…์ถœ๋ ฅ ์˜ˆ

Sresult
"abcabcadc""d"
"abdc""abcd"
"hello""eho"

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

  • "abcabcadc"์—์„œ ํ•˜๋‚˜๋งŒ ๋“ฑ์žฅํ•˜๋Š” ๋ฌธ์ž๋Š” "d"์ž…๋‹ˆ๋‹ค.
  • "abdc"์—์„œ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ํ•œ ๋ฒˆ์”ฉ ๋“ฑ์žฅํ•˜๋ฏ€๋กœ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ "abcd"๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.
  • "hello"์—์„œ ํ•œ ๋ฒˆ์”ฉ ๋“ฑ์žฅํ•œ ๋ฌธ์ž๋Š” "heo"์ด๊ณ  ์ด๋ฅผ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ "eho"๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

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

package ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค;

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;

public class AppearOnlyOnce {
	
	public static String solution(String s) {
	   
		   String answer = "";
		   Set<String> dupliSet = new LinkedHashSet<>();
		   Set<String> nonDupliSet = new LinkedHashSet<>();
		   for(int i = 0; i < s.length(); i++) {
			  String c =  Character.toString(s.charAt(i));
			 if(nonDupliSet.contains(c)) {
				 dupliSet.add(c);
			 }else {
				 nonDupliSet.add(c);
			 }
		   }
		   
		   nonDupliSet.removeAll(dupliSet);
		   System.out.println("์ค‘๋ณต๊ฐ’: " + dupliSet);
		   System.out.println("์ค‘๋ณต์•ˆ๋œ ๊ฐ’: "+ nonDupliSet);
		   

		   String[] newStr = new String[nonDupliSet.size()];
		   newStr = nonDupliSet.toArray(newStr);
		   Arrays.sort(newStr);
		   
	       for(String str : newStr) {
	    	   answer += str;
	    	  
	       }

		  
		   return answer;
	}

	
	public static void main(String[] args) {
		solution("hello");
	}

}


๋‚˜์˜ ์ƒ๊ฐ

์ค‘๋ณต์ œ๊ฑฐ ํ•˜๋ฉด SET ํด๋ž˜์Šค ๋ฐ–์— ์ƒ๊ฐ์ด ๋‚˜์ง€์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ, Set ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ์— ์ ‘๊ทผํ•˜์˜€๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ String s ์— ์ค‘๋ณต ๋ฌธ์ž, ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋ฌธ์ž๋ฅผ ๊ฐ๊ฐ dupliSet, nonDupliSet ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Set ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ, String s ๋ฅผ ํ•œ๊ธ€์ž์”ฉ String c ์— ๋„ฃ์–ด nonDupliSet์— c ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋ผ ์žˆ์œผ๋ฉด dupliSet์— c๋ฅผ ํ•˜๋‚˜์”ฉ add ์‹œํ‚จ๋‹ค. ๊ทธ๋ ‡์ง€์•Š์œผ๋ฉด, nonDupliSet ์— ํ•œ ๊ธ€์ž์”ฉ ๋„ฃ๋Š”๋ฐ, ์ตœ์ดˆ ์‹คํ–‰ ์‹œ์—๋Š” nonDupliSet์ด ๋น„์–ด ์žˆ๊ธฐ๋•Œ๋ฌธ์— else๋ฌธ์ด ๋™์ž‘ํ•œ๋‹ค.

// solution("hello");
else {
	nonDupliSet.add(c);
    }
System.out.println("์ค‘๋ณต๊ฐ’: " + dupliSet);
System.out.println("์ค‘๋ณต์•ˆ๋œ ๊ฐ’: "+ nonDupliSet);
nonDupliSet.removeAll(dupliSet);
System.out.println("์ค‘๋ณต์™„์ „ ์ œ๊ฑฐ ๊ฐ’: "+ nonDupliSet);    

๋งค๊ฐœ๋ณ€์ˆ˜ "hello" ์—์„œ ์ค‘๋ณต๊ฐ’์€ l ์ด๋ฉฐ, ์ตœ์ดˆ ํ•œ๋ฒˆ์˜ I๊ฐ’์„ ํฌํ•จํ•œ ๋ฌธ์ž๋ฅผ ๋‚˜์—ดํ•˜๋ฉด, [h,e,l,o] ์ด๊ณ , ์ค‘๋ณต๋œ ๋ฌธ์ž๋ฅผ ์™„์ „ ์ œ๊ฑฐ (removeAll ๋ฉ”์„œ๋“œ) ๋ฅผ ํ†ตํ•ด ์ค‘๋ณต ์™„์ „ ์ œ๊ฑฐ ๊ฐ’์€ : [h,e,o] ๊ฐ€ ๋œ๋‹ค.

String[] newStr = new String[nonDupliSet.size()];
newStr = nonDupliSet.toArray(newStr);
Arrays.sort(newStr);
		   
for(String str : newStr) {
	answer += str;
	    	  
   }

๋ฌธ์ œ์—์„œ๋Š” ์ค‘๋ณต ์ œ๊ฑฐ ๊ฐ’์—์„œ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜๋ผ๊ณ  ํ–ˆ๊ธฐ๋•Œ๋ฌธ์—, ์ด๋ฅผ String ๋ฐฐ์—ด newStr ์„ ์„ ์–ธํ•˜๊ณ ,nonDupliSet์„ toArray ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ sort ํ›„ newStr์„ ๋ฐ˜๋ณต์„ ๋Œ๋ ค answer์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

LEVEl 0 ๋ฌธ์ œ๊ฐ€ ์ด๋ ‡๊ฒŒ ์–ด๋ ต๋‹ค๋‹ˆ ... OTL


๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„ ๋ฆฌํŽ™ํ† ๋ง

package ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค;

import java.util.LinkedHashSet;
import java.util.Set;

public class AppearOnlyOnce {
    public static String solution(String s) {
        StringBuilder answer = new StringBuilder();
        Set<Character> dupliSet = new LinkedHashSet<>();
        Set<Character> nonDupliSet = new LinkedHashSet<>();

        for (char c : s.toCharArray()) {
            if (nonDupliSet.contains(c)) {
                dupliSet.add(c);
            } else {
                nonDupliSet.add(c);
            }
        }

        nonDupliSet.removeAll(dupliSet);

        for (char c : nonDupliSet) {
            answer.append(c);
        }

        return answer.toString();
    }

    public static void main(String[] args) {
        System.out.println(solution("aaaab"));
    }
}

๋ฆฌํŽ™ํ† ๋ง ์ „๋ฆฌํŽ™ํ† ๋ง ํ›„
  • Stringํƒ€์ž… answer์„ StringBuilder ํƒ€์ž… answer๋กœ ์„ ์–ธํ•˜๊ณ , Set ํด๋ž˜์Šค์˜ ํƒ€์ž…์„ String -> Character ํ˜•์œผ๋กœ ๋ณ€๊ฒฝ
for(int i = 0; i < s.length(); i++ {
String c = Character.toString(s.charAt(i));
}

๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ 

for(char c : nonDupliSet) {
	answer.append(c);
}

๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ–ฅ์ƒ๋œ for๋ฌธ์œผ๋กœ ๋ฐ˜๋ณต์„ ๋Œ๋ ค, StringBuilder ํƒ€์ž…์˜ answer์— ๋ฐ”๋กœ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ

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