반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- git commit 협업
- formik react-query submitting not working
- 헤드퍼스트전략패턴
- 디자인패턴
- 가상면접3장
- 테스트코드책
- 시스템설계
- react
- gitsquash
- 리팩터링2판테스트
- s3이미지다운로드됨
- cypressBDD
- cypress React
- 시스템설계면접예시
- awss3
- 리팩토링2판4장
- Git commit 합치기
- 가상면접2장
- react-ga
- 가상면접으로대규모시스템
- 리액트구글애널리틱스
- 시스템설계면접
- formik submitting not working
- 시스템설계방법
- git commit merge
- git squash
- file not found Error
- FirebaseAnalytics
- 전략패턴
- 시스템설계면접팁
Archives
- Today
- Total
mingg IT
[JAVA] 프로그래머스 문자열 압축 본문
programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
1차 코드 (실패)
class Solution {
public int solution(String s) {
int answer = 1001;
for(int i = 1; i <= s.length()/2; i++) {
String result = "";
int prefix = 1;
String now, next = "";
for(int j = 0; j<= s.length(); j++) {
int start, end = 0;
start = i * j;
end = i * (j + 1);
if(end > s.length()) end = s.length();
now = next;
if(start > s.length()) {
result = result + Integer.toString(prefix) + now;
break;
}
next = s.substring(start, end);
if(now.equals(next)) {
prefix ++;
} else {
result = result + Integer.toString(prefix) + now;
prefix = 1;
}
}
result = result.replaceAll("1", "");
answer = (Math.min(answer, result.length()));
}
return answer;
}
}
원인은 replaceAll("1", "") 이였다.
이유는 만약 10a10b가 나오면 replaceAll시 0a0b가 되기 때문.
이걸 깨닫지 못하고 헤맸다.
2차 코드 (성공)
class Solution {
public int solution(String s) {
if(s.length() == 1) return 1;
int answer = 1001;
for(int i = 1; i <= (s.length()/2) ; i++) {
String result = "";
int prefix = 1;
String now, next = "";
for(int j = 0; j<= s.length() /i; j++) {
int start, end = 0;
start = i * j;
end = i * (j + 1) > s.length() ? s.length() : i * (j + 1);
now = next;
next = s.substring(start, end);
if (now.equals(next)) {
prefix++;
} else {
if (prefix <= 1) {
result = result + now;
} else {
result = result + (prefix) + now;
}
prefix = 1;
}
}
if (prefix <= 1) {
result = result + next;
} else {
result = result + (prefix) + next;
}
// result = result + (prefix) + next;
answer = (Math.min(answer, result.length()));
}
return answer;
}
}
또 한가지 주의해야 할 점은 if문을 한번 더 태우면 run Time 에러가 발생했다.
class Solution {
public int solution(String s) {
if(s.length() == 1) return 1;
int answer = 1001;
for(int i = 1; i <= (s.length()/2) ; i++) {
String result = "";
int prefix = 1;
String now, next = "";
for(int j = 0; j<= s.length() /i; j++) {
int start, end = 0;
start = i * j;
// end = i * (j + 1) > s.length() ? s.length() : i * (j + 1);
end = i * (j+1);
if(end > s.length()) end = s.length;
now = next;
next = s.substring(start, end);
if (now.equals(next)) {
prefix++;
} else {
if (prefix <= 1) {
result = result + now;
} else {
result = result + (prefix) + now;
}
prefix = 1;
}
}
if (prefix <= 1) {
result = result + next;
} else {
result = result + (prefix) + next;
}
// result = result + (prefix) + next;
answer = (Math.min(answer, result.length()));
}
return answer;
}
}
'코딩테스트' 카테고리의 다른 글
[JAVA] 프로그래머스 네트워크 (0) | 2021.04.24 |
---|---|
[JAVA] 프로그래머스 소수 찾기 (0) | 2021.04.23 |
[JAVA] 프로그래머스 스킬 트리 (0) | 2021.04.17 |
[JAVA] 프로그래머스 주식 가격 (0) | 2021.04.13 |
[JAVA] 프로그래머스 프린터 (0) | 2021.04.13 |
Comments