License Key Formatting

HeeSeong·2021년 8월 10일
0

LeetCode

목록 보기
3/38
post-thumbnail

🔗 문제 링크

https://leetcode.com/problems/license-key-formatting/


❔ 문제 설명


You are given a license key represented as a string s that consists of only alphanumeric characters and dashes. The string is separated into n + 1 groups by n dashes. You are also given an integer k.

We want to reformat the string s such that each group contains exactly k characters, except for the first group, which could be shorter than k but still must contain at least one character. Furthermore, there must be a dash inserted between two groups, and you should convert all lowercase letters to uppercase.

Return the reformatted license key.


⚠️ 제한사항


  • 1<=s.length<=1051 <= s.length <= 105

  • s consists of English letters, digits, and dashes '-'.

  • 1<=k<=1041 <= k <= 10^4



💡 풀이 (언어 : Java)


문제를 제대로 파악하지 못해서 해맸다. 첫 그룹의 단어를 유지하고 나머지 그룹들을 K개씩 끊는 것이라고 생각했는데, 알고보니 처음 그룹의 단어길이는 상관없고 끝에서 부터 체킹하는 것이 문제였다. 문제의 예시와 설명이 부족한 것 같다. 끝에서부터 인덱스를 체킹하고 K씩 건너뛰는데 문자열을 '-'없애고 대문자 처리를 먼저 해준뒤에 StringBuilder로 만들어서 insert()메서드로 인덱스 사이사이에 '-'를 추가해준다. 단 이렇게하면 StringBuilder의 길이가 동적으로 변하므로 알맞은 인덱스 이동이 불가능하다. 그래서 최초의 길이를 미리 변수에 담아서 사용한다.

class Solution {
    public String licenseKeyFormatting(String s, int k) {
        s = s.replace("-", "").toUpperCase();
        StringBuilder sb = new StringBuilder(s);
        // sb.insert로 길이가 동적으로 변하므로 최초 길이를 변수에 담아 사용해야 한다
        // '-'를 추가하고 그 앞의 경우만 인덱스 범위에 포함되므로 전체길이가 변해도 영향 없다
        int len = sb.length();
        // 처음 그룹은 길이의 제한이 없고 끝에서 부터 K개를 지켜야 하므로 끝에서부터 인덱스 시작
        // 끝에서 부터 K개씩 세어서 사이에 '-'를 넣어줌, 0번째 인덱스는 '-' 들어가면 안되므로 제외
        for (int i = len-k; i > 0; i -= k) {
            sb.insert(i, '-');
        }
        return sb.toString();
    }
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글