You are given a license key represented as a string S which only alphanumeric character and dashes. The string is separated into N+1 groups by N dashes.
Given a number K, we would want to reformat the strings 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 all lowercase letters should be converted to uppercase.
Given a non-empty string S and a number K, format the string according to the rules described above.
=>오직 알파벳 철자와 대쉬로 이루어진 String S로 나타내지는 라이센스 키가 주어진다. String은 N개의 대쉬에 의해 N+1 그룹으로 분리된다.
숫자 K가 주어지는데, 우리는 string을 재형성하고자 한다. 각각의 그룹은 정확히 K개의 character를 포함하고, K보다 작을 수도 있는 첫번째 그룹을 제외하고 최소한 1개의 character를 포함해야한다. 게다가, 두 개의 그룹 사이에 대쉬가 삽입되어야 하고 모든 소문자는 대문자로 변환되어야 한다.
The length of string S will not exceed 12,000, and K is a positive integer.
String S consists only of alphanumerical characters (a-z and/or A-Z and/or 0-9) and dashes(-).
String S is non-empty.
Example 1 :
Input : S = "5F3Z-2e-9-2", K = 4
Output : "5F3Z-2E92"
Example 2 :
Input : S = "2-5g-3-J",K = 2
Output : "2-5G-3J"
사용할 자료구조 : StringBuilder
=>String : String의 +연산이나 concat을 사용하면 새로운 String 객체를 new로 만들기 때문에 그만큼 메모리를 많이 차지하기 때문이다.
=>StringBuffer : 멀티스레드 환경에서 동기화(Synchronized)
=>StringBuilder : 싱글스레드 환경에서 비동기화(Asynchronized). Append 등 연산을 자유자재로 쓰기 위해 사용한다.
알고리즘
1. 원래 String에서 대쉬(-)제거한다. - replace(char oldChar, char newChar)
2. 소문자는 대문자로 바꾼다. - toUpperCase
3. 뒤에서부터 카운팅한다! - for(int i=k; i < leng; i = i+k)
=>더 직관적으로
새로운 String 객체를 생성하여 input String에서 대쉬 제거, 대문자 변환한다.