728x90
반응형
https://leetcode.com/problems/license-key-formatting/submissions/
class Solution {
public String licenseKeyFormatting(String s, int k) {
//뒤에서부터 k개수만큼 자르고 사이에 '-' 문자 추가하기
//소문자일 경우 대문자로 변경
//1.ds
//모든 '-'문자 제거하기
s=s.toUpperCase();
StringBuilder sb = new StringBuilder();
for(char x: s.toCharArray()){
if(x=='-') continue;
else sb.append(x);
}
s=sb.toString();
System.out.println("raw"+" "+s);
//2.loop
int n=s.length();
sb = new StringBuilder();
int cnt=0;
char[] arr = s.toCharArray();
for(int i=n-1;i>=0;i--){
if(cnt==k) {
sb.append('-');
sb.append(arr[i]);
cnt=0;
}else sb.append(arr[i]);
cnt++;
}
s=sb.reverse().toString();
return s;
}
}
+) 세련된 풀이
package string;
public class LicenseKeyFormatting {
public static String solve(String str, int k) {
//1. - del
String newStr= str.replace("-", "");
System.out.println("1: "+newStr);
//2. upper
newStr= newStr.toUpperCase();
System.out.println("2: "+newStr);
//3. k개로 파싱하기, 그리고 - 넣기
StringBuilder sb = new StringBuilder(newStr);
System.out.println("3: "+newStr);
// "8F3Z2E9W"
int len = sb.length();
for(int i=k; i<len; i=i+k) {
System.out.println("len-i: "+(len-i));
sb.insert(len-i, '-');
System.out.println("4: "+sb);
}
return sb.toString();
}
}
class Solution {
public String licenseKeyFormatting(String s, int k) {
//숫자, 문자, '-'로만 이루어진 문자열
//첫번째 그룹을 제외하고 모든 그룹의 글자수가 K개로 형식화한다.
//첫번째 그룹은 하나의 문자 이상을 가져야 한다.
//모든 소문자를 대문자로 변환한다.
//(1) 모든 소문자를 대문자로 변환하고, '-'를 모두 제거
s=s.toUpperCase();
s=s.replace("-","");
//(2) 첫번째 그룹 제외하고 형식화 -> 뒤에서부터 4개씩 자른다.
StringBuilder sb= new StringBuilder();
for(int i=s.length()-1, j=1; i>=0; i--, j++){
sb.append(s.charAt(i));
if(j%k==0 && i!=0) {
sb.append("-");
}
}
return sb.reverse().toString();
}
}
(1) sb.append(s)로 문자열을 넣고,
(2) sb.insert를 이용해 뒤에서부터 K칸마다 '-'를 넣는다.
class Solution {
public String licenseKeyFormatting(String s, int k) {
//숫자, 문자, '-'로만 이루어진 문자열
//첫번째 그룹을 제외하고 모든 그룹의 글자수가 K개로 형식화한다.
//첫번째 그룹은 하나의 문자 이상을 가져야 한다.
//모든 소문자를 대문자로 변환한다.
//(1) 모든 소문자를 대문자로 변환하고, '-'를 모두 제거
s=s.toUpperCase();
s=s.replace("-","");
int n=s.length();
//(2) 첫번째 그룹 제외하고 형식화 -> i=i+k
StringBuilder sb= new StringBuilder();
sb.append(s);
//4 - 8 - 12일 때
//length-4, length-8, length-12에 '-' 삽입
for(int i=k; i<n; i=i+k){
sb.insert(n-i, "-");
}
return sb.toString();
}
}
728x90
반응형
'Java > Java 알고리즘 LeetCode' 카테고리의 다른 글
[LeetCode- Ch.2 정렬 & 검색] 2. K번째 제일 큰 원소 (+ PriorityQueue) (0) | 2022.10.28 |
---|---|
[LeetCode- Ch.2 정렬 & 검색] 1. 제로 이동 (+ allMatch, noneMatch, for-while) (0) | 2022.10.28 |
[LeetCode- Ch.1 문자열] 4. 플러스 원 (0) | 2022.10.28 |
[LeetCode- Ch.1 문자열] 2. 보석과 돌 (+ toCharArray) (0) | 2022.10.28 |
[LeetCode- Ch.1 문자열] 1. 고유한 이메일 (+ StringBuilder, toCharArray) (0) | 2022.10.28 |