
오늘의 회고
- 오늘의 문제
- 오늘의 문제는 정말 어려웠다.
문자열이란 정말 나를 힘들게 한다.
오늘 풀이는 2시간이 넘게 걸렸다.
- 한시간 하다가 잠들어서 리셋하구 다시했다.
안풀리니 잠이 솔솔...
정말 여러 가지 방법을 생각해본거같다.
정답이 정말 허무하다.
- 정답 및 시도했던 방법
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length - 1; i++){
if(phone_book[i + 1].startsWith(phone_book[i])){
answer = false;
break;
}
}
return answer;
}
}
- 이 문제는 Arrays.sort() 가 핵심이다.
저 함수 하나로 문제 난이도는 급 하강한다.
- 생각했던 방법 -
- 중첩 for 문을 이용하여 간단하게 풀어주기
-> 처참히 실패... - 먼저 phone_book을 정렬하고
한번 for문을 돌때, 앞 뒤 요소가 성립이 안된다면
ArrayList에 추가해주고,
뒷 요소에 ArrayList 요소들을 다시 비교해주기!
-> 거의 다 왔지만 실패...
- 사실 문제 고민만 오래했지 방법은 여러가지는 아니었다.
'어떻게 하면 중첩 for 문을 없앨 수 있을까...' 만 정말 많이 생각했다.
그래서 생각해낸 방법이 2번인데,
2번 방식으로 테스트 및 효율성 2번까지 성공했다.
하지만 아직 3,4번이 안되었다.
너무 지쳐서 또 뭘 해야 하나 고민을 했다.
지쳐서 쓰러지기 직전, 나는 Arrays.sort()를 한 배열을 출력해보았다.
근데 신기한 것을 발견했다.
["119", "97674223", "1195524421"]
이것을 정렬하니,
["119", "1195524421", "97674223"]
이렇게 바뀐 것이다.
왜지? 분명 더 긴데..?
너무 이해가 안되어서 Arrays.sort 정렬방식을
챗지피티 센세에게 물어보았다.
맙소사..!
첫 번째 글자부터 순서대로 비교하며,
i번째 글자가 큰 문자열은 가차없이
뒤로 보내버린 다는것!!
그렇다면,
'앞, 뒤만 비교를 하면 끝나는 것 아닌가..?'
왜냐면,
n번째 다음 n+1번째는
- n번째 문자열로 시작하지만, 뒤가 다를 수 있고,(문제조건 상 문자열이 같을 수 없음)
- n번째 문자열로 시작자체를 안하고, n번째 문자열보다 더 클수도 있다.
즉, n번째와 n+2번째는 서로 상관할 이유가 없다. 그렇기에 n+1번째와 비교하면 된다.
- 정답 방법 -
1. 문자 배열 정렬하기
2. i번째 문자열이 i+1번째 문자열의 startsWith 면 answer = false; 후 break;
3. 끝.
2시간 고민한 문제의 정답은 정말 심플했다.
역시 문자열은 함수가 전부다...
각 함수의 특성을 잘 아는 것이 제일 중요하다!
- 새롭게 알게된 내용
1. 숫자로 이루어진 문자열 배열의 Arrays.sort() 정렬방식
2. 효율성을 채점하는 문제는 그지같다는것!
- 내일 학습할 내용
1. 문자열 함수 복습
2. Arrays 함수 복습
'코딩테스트 - Java' 카테고리의 다른 글
99클럽 코테 스터디 11일차 TIL + 오늘의 학습 키워드 : 포인터 (0) | 2024.08.01 |
---|---|
99클럽 코테 스터디 6일차 TIL + 오늘의 학습 키워드 : 경우의수 (0) | 2024.07.27 |
99클럽 코테 스터디 4일차 TIL + 오늘의 학습 키워드 : split() (2) | 2024.07.25 |
99클럽 코테 스터디 3일차 TIL + 오늘의 학습 키워드 : Arrays.sort() (3) | 2024.07.24 |
99클럽 코테 스터디 2일차 TIL + 오늘의 학습 키워드 : 등차수열 (0) | 2024.07.23 |
안녕하세요. 성장하고 싶은 개발자 orElse입니다. 지켜봐주세요.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!