λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Programmers lv-1

κ°€μž₯ κ°€κΉŒμš΄ 같은 κΈ€μž - Java [μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅]

by κ·€ν”Όν‚€ 2022. 12. 23.

 

 

❀️ Problem

더보기
  • 문제
    λ¬Έμžμ—΄ sκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, s의 κ° μœ„μΉ˜λ§ˆλ‹€ μžμ‹ λ³΄λ‹€ μ•žμ— λ‚˜μ™”μœΌλ©΄μ„œ, μžμ‹ κ³Ό κ°€μž₯ κ°€κΉŒμš΄ κ³³μ— μžˆλŠ” κ°™μ€ κΈ€μžκ°€ μ–΄λ”” μžˆλŠ”지 μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
    예λ₯Ό λ“€μ–΄, s="banana"라고 ν•  λ•Œ,  κ° κΈ€μžλ“€μ„ μ™Όμͺ½λΆ€ν„° μ˜€λ₯Έμͺ½μœΌλ‘œ μ½μ–΄ λ‚˜κ°€λ©΄μ„œ λ‹€μŒκ³Ό κ°™μ΄ μ§„ν–‰ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

    bλŠ” μ²˜μŒ λ‚˜μ™”κΈ° λ•Œλ¬Έμ— μžμ‹ μ˜ μ•žμ— κ°™μ€ κΈ€μžκ°€ μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” -1둜 ν‘œν˜„ν•©λ‹ˆλ‹€.
    aλŠ” μ²˜μŒ λ‚˜μ™”κΈ° λ•Œλ¬Έμ— μžμ‹ μ˜ μ•žμ— κ°™μ€ κΈ€μžκ°€ μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” -1둜 ν‘œν˜„ν•©λ‹ˆλ‹€.
    n은 μ²˜μŒ λ‚˜μ™”κΈ° λ•Œλ¬Έμ— μžμ‹ μ˜ μ•žμ— κ°™μ€ κΈ€μžκ°€ μ—†μŠ΅λ‹ˆλ‹€. μ΄λŠ” -1둜 ν‘œν˜„ν•©λ‹ˆλ‹€.
    aλŠ” μžμ‹ λ³΄λ‹€ λ‘ μΉΈ μ•žμ— aκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 2둜 ν‘œν˜„ν•©λ‹ˆλ‹€.
    n도 μžμ‹ λ³΄λ‹€ λ‘ μΉΈ μ•žμ— n이 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 2둜 ν‘œν˜„ν•©λ‹ˆλ‹€.
    aλŠ” μžμ‹ λ³΄λ‹€ λ‘ μΉΈ, λ„€ μΉΈ μ•žμ— aκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ΄ μ€‘ κ°€κΉŒμš΄ κ²ƒμ€ λ‘ μΉΈ μ•žμ΄κ³ , μ΄λŠ” 2둜 ν‘œν˜„ν•©λ‹ˆλ‹€.
    λ”°λΌμ„œ μ΅œμ’… κ²°κ³Όλ¬Όμ€ [-1, -1, -1, 2, 2, 2]κ°€ λ©λ‹ˆλ‹€.

    λ¬Έμžμ—΄ s이 μ£Όμ–΄μ§ˆ λ•Œ, μœ„μ™€ 같이 μ •μ˜λœ 연산을 μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜ solution을 μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

  • μ œν•œ 사항
    • 1 ≤ s의 κΈΈμ΄ ≤ 10,000
    • s은 μ˜μ–΄ μ†Œλ¬Έμžλ‘œλ§Œ μ΄λ£¨μ–΄μ Έ μžˆμŠ΅λ‹ˆλ‹€.

 

  • μž…μΆœλ ₯ 예 & μ„€λͺ…
no participant result
1 "banana" [-1, -1, -1, 2, 2, 2]
2 "foobar" [-1, -1, 1, -1, -1, -1]
  1. 지문과 κ°™μŠ΅λ‹ˆλ‹€.
  2. μ„€λͺ… μƒλž΅

 

πŸ’› Solution

풀이

import java.util.Arrays;
class Solution {
    public int[] solution(String s) {
        int[] answer = new int[s.length()];
        int[] alpha = new int[26];
        Arrays.fill(alpha, -1);

        for(int i=0; i<s.length(); i++) {
            int tmp = s.charAt(i)-97;
            if(alpha[tmp] == -1) {
                answer[i] = alpha[tmp];
            } else {
                answer[i] = i - alpha[tmp];
            }
            alpha[tmp] = i;
        }
        return answer;
    }
}

 

μ²˜λ¦¬μ†λ„ VERY GOOD😎


 


 

πŸ’œ Comment

λ¨Όμ € λ°˜ν™˜ν•  int[] answer을 s.length길이만큼 λ§Œλ“€μ–΄ λ‘”λ‹€. κ·Έ λ‹€μŒ, μ•ŒνŒŒλ²³ 개수만큼의 λ°°μ—΄ int[] alphaλ₯Ό λ§Œλ“ λ‹€. alpha[0]은 a라고 κ°€μ •ν•œλ‹€. alpha[]μ—λŠ” Arrays.fill();을 μ‚¬μš©ν•΄μ„œ -1씩을 λ„£μ–΄λ‘”λ‹€. μ΄λ ‡κ²Œ ν•˜λŠ” μ΄μœ λŠ” 처음 λ“±μž₯ν•˜λŠ” μ•ŒνŒŒλ²³μ€ -1 값을 κ°€μ Έμ•Όν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

forλ¬Έ μ•ˆμ—μ„œ int tmp = s.charAt(i)-97;을 μ„ μ–Έν•œλ‹€. 97을 λΉΌλŠ” μ΄μœ λŠ” μ•„μŠ€ν‚€ μ½”λ“œμ—μ„œ μ†Œλ¬Έμž aκ°€ 97λΆ€ν„° μ‹œμž‘ν•˜κΈ° λ•Œλ¬Έμ—, λ°°μ—΄ 0번이 aκ°€ 될 수 μžˆλ„λ‘ κ·Έ μˆ«μžλ§ŒνΌμ„ λΉΌλŠ” 것이닀.

κ·Έ λ‹€μŒ if문을 μ‚¬μš©ν•΄μ„œ alpha[tmp]κ°€ -1이면 == 즉, 처음 λ“±μž₯ν•œ κ²½μš°μ—λŠ” answer[i]에 alpha[tmp] 값을 넣도둝 ν•˜μ˜€λ‹€. 그렇지 μ•Šμ€ κ²½μš°μ—λŠ” alpha[tmp] μ•ˆμ— λ“€μ–΄μžˆλŠ” λ°°μ—΄ μœ„μΉ˜λ₯Ό iμ—μ„œ λΉΌμ€€λ‹€. κ·Έ μ΄μœ λŠ” iλŠ” ν˜„μž¬ μ•ŒνŒŒλ²³μ˜ ν˜„μž¬ μœ„μΉ˜μ΄λ―€λ‘œ μ—¬κΈ°μ„œ μ–Όλ§ˆλ‚˜ λ–¨μ–΄μ ΈμžˆλŠ”μ§€λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œ νŠΉμ • μ•ŒνŒŒλ²³μ΄ λ“±μž₯ν•œ ν˜„μž¬μœ„μΉ˜μ—μ„œ ν•΄λ‹Ή μ•ŒνŒŒλ²³μ΄ 이전에 λ“±μž₯ν•œ λ°°μ—΄ 번호λ₯Ό λΉΌμ•Όν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

κ·Έ λ‹€μŒ, alpha[tmp] = i;λ₯Ό λ„£μ–΄μ„œ alpha[]의 ν•΄λ‹Ή μ•ŒνŒŒλ²³μ΄ λ“±μž₯ν•œ μ΅œμ‹  μœ„μΉ˜λ₯Ό κ°±μ‹ ν•΄μ€€λ‹€.

 

 

 

8478μœ„!!

λŒ“κΈ€