import java.util.ArrayList;
import java.util.Collections;
class Solution {
public String solution(String s) {
/*
보기 -> 설계 :
- 한 번만 등장한 문자
- 사전순
- 특이 처리->빈 문자열
메소드 공급 및 투어 결정 :
- ArrayList를 만들어 !contains로 판단해서 넣는다
- Collection.sort한다
- 첫 투어는 charAt으로
상세 입출력 current 확인 : string 입력 / string 출력
*특이처리 굳이 안해도 되는구나
*/
// 떠오르는 흐름 : char를 arraylist에 넣
// 작성 : ISC + Field + T/O + OEC
// Field : slot +
ArrayList<Character> list = new ArrayList<>();
// Touring Operation
for (char T : s.toCharArray()) {
if (!list.contains(T)) list.add(T);
}
Collections.sort(list);
// OEC : list ->toArray? 가 아닌 string 변환이다
// builder로 -append하자
StringBuilder sb = new StringBuilder();
for (char T : list) {
sb.append(T);
}
return sb.toString();
}
}
처음 버리기 : 잊어버림
시도1
계속 훈련한 결과 다행히 메소드는 제대로 공급
오류 발생 단계 : 문제를 잘못 이해하고 있었다
내가 한 것 : 있는 모든 문자를 중복없이 하나씩만 넣어서 사전 정렬
필요한것 : 하나만 있는것
어떻게 해야 하는가? -> 사전은 맞으니 그대로 놔두고, 넣는것을 다시 설계
시도 2 :
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public String solution(String s) {
ArrayList<Character> list1 = new ArrayList<>();
ArrayList<Character> list2 = new ArrayList<>();
ArrayList<Character> list4 = new ArrayList<>();
// A : 원래 스트링을 list1로 만든다
for (char T : s.toCharArray()) {
list1.add(T);
}
// B : 빈 list 2 : list1에서 하나씩 집어넣는다(!contains).
for (char T : list1) {
if (!list2.contains(T)) list2.add(T);
}
// C : list1에서 list2를 빼서도 살아남는 것들은 두개 이상씩 든 문자들이다
// 리스트 복제
ArrayList<Character> list3 = new ArrayList<>(list1);
for (char T : list2) {
list3.remove(T);
}
// D : list1을 순회하면서 3 아닌 문자를 넣는다
Collections.sort(list3);
StringBuilder sb = new StringBuilder();
for (char T : list1) {
if (!list3.contains(T)) sb.append(T);
}
return sb.toString();
}
}
오류가 난 뒤 아무리 봐도 모르겠다면 한 줄씩 테스트하는 수밖에 없다
복사 메서드를 처음 사용했으니 오류가 날 여지가 많을 것이다. 우선 거기서부터 시작해본다
-
복사가 아직 익숙치 않음 -> 원 리스트, 카피본 영향받는 얇은 등이 될 수 있으므로
메소드는 나중에 찾아보고 우선 수동으로 리스트를 만든다
list 3에도 인자 넣어주기 전에 생성해줘야 되는점 주의
-
시도 3 :
다시 시도해도 E지만, 정확히 어떤 숫자로 E가 발생하는지 유추함
첫번째 string 길이는 9이다
이걸 보면서 한줄씩 따라가볼것
-> 프로그래머스 페이지에서는 줄별로 블럭별로 디버깅이 어려우므로 우선 아래 블럭들을 지우고 시도 -> 오류 있는지 파악
B까지 진행했을때 E가 발생하지 않는다
C까지 진행시에 E 발생 확인, 내가 remove를 잘못 사용하고 있었구나
이제 어떻게 하지?
remove메서드 자체는 문제가 없을 것이다, Integer character offset문제인가?
우선 B까지의 결과를 출력해보자
B단계까지는 의도한대로 작동했다
'코테 기초' 카테고리의 다른 글
코딩 기초 트레이닝 : 2차원 순회하면서 1++ 채우기 (0) | 2024.04.09 |
---|---|
offset, 매칭 (0) | 2024.04.05 |
컨트롤 제트 (0) | 2024.04.04 |
A로 B 만들기 (0) | 2024.04.04 |
잘라서 배열로 저장하기 (0) | 2024.04.04 |