Back-end/Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋ถ€๋ถ„๋ฌธ์ž์—ด (java)

Nellie Kim 2023. 8. 2. 21:46
728x90

๐Ÿ’‍โ™€๏ธ  ๋ฌธ์ œ ์„ค๋ช…

์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด t์™€ p๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, t์—์„œ p์™€ ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋ถ€๋ถ„๋ฌธ์ž์—ด ์ค‘์—์„œ, ์ด ๋ถ€๋ถ„๋ฌธ์ž์—ด์ด ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜๊ฐ€ p๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒƒ์ด ๋‚˜์˜ค๋Š” ํšŸ์ˆ˜๋ฅผ returnํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, t="3141592"์ด๊ณ  p="271" ์ธ ๊ฒฝ์šฐ, t์˜ ๊ธธ์ด๊ฐ€ 3์ธ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ 314, 141, 415, 159, 592์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ž์—ด์ด ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜ ์ค‘ 271๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆ˜๋Š” 141, 159 2๊ฐœ ์ž…๋‹ˆ๋‹ค.


โŒ ์ œํ•œ์‚ฌํ•ญ

1 ≤ p์˜ ๊ธธ์ด ≤ 18
p์˜ ๊ธธ์ด ≤ t์˜ ๊ธธ์ด ≤ 10,000
t์™€ p๋Š” ์ˆซ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด๋ฉฐ, 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก  ์ž…์ถœ๋ ฅ ์˜ˆ

 

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


์ž…์ถœ๋ ฅ ์˜ˆ #1
๋ณธ๋ฌธ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
p์˜ ๊ธธ์ด๊ฐ€ 1์ด๋ฏ€๋กœ t์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด์€ "5", "0", 0", "2", "2", "0", "8", "3", "9", "8", "7", "8"์ด๋ฉฐ ์ด์ค‘ 7๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆซ์ž๋Š” "5", "0", "0", "2", "2", "0", "3", "7" ์ด๋ ‡๊ฒŒ 8๊ฐœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3
p์˜ ๊ธธ์ด๊ฐ€ 2์ด๋ฏ€๋กœ t์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด์€ "10", "02", "20", "03"์ด๋ฉฐ, ์ด์ค‘ 15๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆซ์ž๋Š” "10", "02", "03" ์ด๋ ‡๊ฒŒ 3๊ฐœ์ž…๋‹ˆ๋‹ค. "02"์™€ "03"์€ ๊ฐ๊ฐ 2, 3์— ํ•ด๋‹นํ•œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•˜์„ธ์š”

 

 

๐Ÿ‘ฉ ๋‚ด ํ’€์ด

import java.util.*;

class Solution {
    public int solution(String t, String p) {
        // 1. t๋ฅผ p๊ธธ์ด๋กœ ์•ž์—๋ถ€ํ„ฐ ์ž๋ฅด๊ธฐ -> ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ธฐ
        // 2. ๋ฐฐ์—ด์˜ ์›์†Œ ์ค‘, p๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์›์†Œ ๊ตฌํ•˜๊ธฐ
        
        int answer = 0;
        ArrayList<String> list = new ArrayList<>();

        for (int i = 0; i < t.length() - p.length() + 1; i++) {
            list.add(t.substring(i, i + p.length()));
        }

        for (String s : list) {
            int intS = Integer.parseInt(s);  // ํ‹€๋ฆฐ ๋ฐฉ๋ฒ•!!
            int intP = Integer.parseInt(p);  // ํ‹€๋ฆฐ ๋ฐฉ๋ฒ•!!
            if (intS <= intP) {
                answer++;
            }
        }


        return answer;
    }
}

์‹คํ–‰๊ฒฐ๊ณผ๋Š” ํ†ต๊ณผ์˜€์ง€๋งŒ, ์ œ์ถœ ์‹œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์™”๋‹ค.

์ด์œ ๋Š” Integer.parseInt() ๋•Œ๋ฌธ์ด์—ˆ๋‹ค!

 

 Integer.parseInt() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฌธ์ž์—ด ๋‚ด์˜ ์•ž์— ์˜ค๋Š” 0์„ 8์ง„์ˆ˜๋กœ ํ•ด์„ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ์ฃผ์–ด์ง„ ์ž…๋ ฅ ๋ฌธ์ž์—ด t์™€ p๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” ์ž˜ ์ž‘๋™ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ, ์ด๋Š” 8์ง„์ˆ˜๋กœ ํ•ด์„๋˜์–ด ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค!!

์˜ˆ๋ฅผ ๋“ค์–ด,
"010" (๋ถ€๋ถ„ ๋ฌธ์ž์—ด) -> Integer.parseInt("010") -> 10 (์ž˜๋ชป๋จ, ๋ฌธ์ž์—ด "010"์ด์–ด์•ผ ํ•จ)

 

๐Ÿ‘ฉ ์ˆ˜์ •ํ•œ ํ’€์ด 1

import java.util.*;

class Solution {
    public int solution(String t, String p) {
        // 1. t๋ฅผ p๊ธธ์ด๋กœ ์•ž์—๋ถ€ํ„ฐ ์ž๋ฅด๊ธฐ -> ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ธฐ
        // 2. ๋ฐฐ์—ด์˜ ์›์†Œ ์ค‘, p๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์›์†Œ ๊ตฌํ•˜๊ธฐ
        int answer = 0;
        ArrayList<String> list = new ArrayList<>();

        for (int i = 0; i < t.length() - p.length() + 1; i++) {
            list.add(t.substring(i, i + p.length()));
        }

        for (String s : list) {
            if (s.compareTo(p) <= 0) { // ๋ฌธ์ž์—ด ์ž์ฒด๋ฅผ ๋น„๊ต!!
                answer++;
            }
        }


        return answer;
    }
}

๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ์œ„ํ•ด s.compareTo(p)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ์‚ฌ์ „์‹์œผ๋กœ ๋น„๊ตํ•œ๋‹ค.

`s.compareTo(p)` ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด s์™€ ๋ฌธ์ž์—ด p๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‘ ๋ฌธ์ž์—ด์ด ๊ฐ™์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , s๊ฐ€ p๋ณด๋‹ค ์‚ฌ์ „์‹์œผ๋กœ ์•ž์— ์˜ค๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , s๊ฐ€ p๋ณด๋‹ค ์‚ฌ์ „์‹์œผ๋กœ ๋’ค์— ์˜ค๋ฉด ์–‘์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด,
- "141".compareTo("271")๋Š” -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ "141"์€ "271"๋ณด๋‹ค ์‚ฌ์ „์‹์œผ๋กœ ์•ž์— ์˜จ๋‹ค.
- "159".compareTo("271")๋Š” -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ "159"์€ "271"๋ณด๋‹ค ์‚ฌ์ „์‹์œผ๋กœ ์•ž์— ์˜จ๋‹ค.

 

๐Ÿ‘ฉ ์ˆ˜์ •ํ•œ ํ’€์ด 2

import java.util.*;

class Solution {
    public int solution(String t, String p) {
        // 1. t๋ฅผ p๊ธธ์ด๋กœ ์•ž์—๋ถ€ํ„ฐ ์ž๋ฅด๊ธฐ -> ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๊ธฐ
        // 2. ๋ฐฐ์—ด์˜ ์›์†Œ ์ค‘, p๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์›์†Œ ๊ตฌํ•˜๊ธฐ
        int answer = 0;
        ArrayList<String> list = new ArrayList<>();

        for (int i = 0; i < t.length() - p.length() + 1; i++) {
            list.add(t.substring(i, i + p.length()));
        }

        for (String s : list) {
            Long intS = Long.parseLong(s); // Long์œผ๋กœ ๋ณ€ํ™˜!
            Long intP = Long.parseLong(p); // Long์œผ๋กœ ๋ณ€ํ™˜!
            if (intS <= intP) {
                answer++;
            }
        }
        return answer;
    }
}

Long.parseLong() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ long ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์ž.

Long.parseLong() ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด ๋‚ด์˜ ์•ž์— ์˜ค๋Š” 0์„ 8์ง„์ˆ˜๋กœ ํ•ด์„ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฌธ์ž์—ด์„ long ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์•ž์— ์˜ค๋Š” 0์„ ์œ ์ง€ํ•œ๋‹ค!!

์˜ˆ๋ฅผ ๋“ค์–ด,
"010" (๋ถ€๋ถ„ ๋ฌธ์ž์—ด) -> Long.parseLong("010") -> 10 (์˜ฌ๋ฐ”๋ฆ„, 10์ด๋ผ๋Š” ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌ)

 

Long.parseLong()์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ์ง์ ‘ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์•ž์— ์˜ค๋Š” 0๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.