개발놀이터
1-6. 중복된 문자 제거 본문
package string.duplicateword16.my;
import java.util.Scanner;
public class Main {
/**
* 맞췄다아아아아아아아아아아아아아아아아
*
* savePoint 의 개념 도입으로 save 배열에 알파벳이 담기는 첫 순간은 지나가고
* 그 후에는 savePoint 의 수가 1이 아니게 되기 때문에 이점을 이용하여 중복 제거
*
* 진짜 자괴감 엄청나다...
* 선생님이 너무 쉽게 풀어버려서 똥꼬쑈 한 내가 너무 바보된 느낌...
*
* String 클래스의 indexOf 를 이용하면 정말정말 쉽게 풀린다...
*
* cf) indexOf 란?
* 쉽게 말해 index 위치를 알려주는 것이다.
*
* ex) String str = Spring 이라는 글자에서
* str.indexOf(S) = 0
* str.indexOf(n) = 4
* str.indexOf(t) = 1
*
* 이런식으로 몇번째에 위치하고 있는지를 알려주는 것
*
* 이걸 문제에 적용시키면 다음과 같다.
*
* 문제 : ksekkset
* for (int i = 0 ; i < str.length() ; i++) {
* System.out.println(str.charAt(i) + ", " + i + ", " + str.indexOf(str.charAt(i)));
* }
*
* 결괏값
* k 0 0
* s 1 1
* e 2 2
* k 3 0
* k 4 0
* s 5 1
* e 6 2
* t 7 7
*
* 즉 i 값과 indexOf 해서 나온 값이 같으면 answer 에 저장 아니면 무시하면 되는 것이었다..
* for (int i = 0 ; i < str.length() ; i++) {
* System.out.println(str.charAt(i) + ", " + i + ", " + str.indexOf(str.charAt(i)));
* if (i == str.indexOf(str.charAt(i))) {
* answer += str.charAt(i);
* }
* }
*
* 진짜 너무 허무하다...
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String input = kb.next();
System.out.println(solution(input));
}
private static String solution(String input) {
String answer = "";
char[] c = input.toCharArray();
char[] save = new char[100];
int cnt = 0;
for (int i = 0; i < c.length; i++) {
int savePoint = 0;
save[cnt] = c[i]; // ksekkset -> kset
// save[0] = k / savePoint = 1
// save[1] = s / savePoint = 1
// save[2] = e / savePoint = 1
// save[3] = k / savePoint = 2
// save[4] = k / savePoint = 3
// save[5] = s / savePoint = 2
for (int j = 0; j < save.length; j++) {
if (save[j] == c[i]) {
savePoint++;
if (savePoint != 1) {
c[i] = '\0';
}
}
}
cnt++;
}
for (int i = 0; i < c.length; i++) {
if (c[i] != '\0') {
answer += c[i];
}
}
return answer;
}
}
나름 참신한 발상으로 문제를 풀고 정답을 맞췄지만 선생님의 풀이에 힘이 쭉 빠지는 문제였다...
나는 30분 40분 고민해가면서 죽자고 풀어내면 선생님은 특정 클래스의 특정 메서드를 사용하여 너무 간단하게 풀어버린다.
자세한 내용은 주석 참고
package string.duplicateword16.teacher;
import java.util.Scanner;
public class Main {
private static String solution(String str) {
String answer = "";
for (int i = 0; i < str.length(); i++) {
//System.out.println(str.charAt(i) + " " + i + " " + str.indexOf(str.charAt(i)));
if (i == str.indexOf(str.charAt(i))) {
answer += str.charAt(i);
}
}
return answer;
}
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(solution(str));
}
}
'기타 > 코딩테스트' 카테고리의 다른 글
1-8. 유효한 회문 문자열 (0) | 2023.02.09 |
---|---|
1-7. 회문 문자열 (0) | 2023.02.09 |
1-5. 특정 문자 뒤집기 (0) | 2023.02.07 |
1-4. 단어 바꾸기 (0) | 2023.02.07 |
1-3. 문장 속 단어찾기 (0) | 2023.02.07 |