티스토리 뷰
반응형
https://programmers.co.kr/learn/courses/30/lessons/17685
코딩테스트 연습 - [3차] 자동완성
자동완성 포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g �
programmers.co.kr
약 34%의 정답률인 문제입니다.
레벨 4치고는 매우 쉬운 문제였습니다.
카카오에서는 이 문제를 풀기 위한 자료구조로 트라이(Trie)를 소개해줬습니다.
문제를 풀 당시에는 이런 자료구조를 모르고 풀었습니다.
입력된 단어들을 사전 순으로 정렬하여 특정 단어의 앞, 뒤 단어와 겹치는 부분을 검사하고, 최댓값을 통하여 해당 단어의 최소 입력 횟수를 구할 수 있었습니다.
예를 들어 2번째 단어에서
- "abc", "abcd", "abcdf"의 경우 겹치는 최대값이 4입니다.
- "abc", "adef", "adzzzzz"의 경우 겹치는 최대값이 2입니다. 즉, 3개를 입력해야 합니다.
- "abc", "abcd", "ddd"의 경우 겹치는 최대값은 3입니다. 즉, 4개를 입력해야 합니다.
메소드
void solution
ArrayList에 단어들을 넣고 사전 순으로 정렬합니다. (words를 그냥 정렬해도 됩니다.)
answer는 총 입력 횟수이고 value는 해당 단어의 입력 횟수를 구하기 위한 임시 값입니다.
구하고자 하는 단어의 앞, 뒤 단어와 겹치는 부분을 구하고 최댓값이 단어의 길이와 같다면 최댓값을
같지 않다면 최댓값 + 1을 answer에 더해줍니다.
int len
단어 s1, s2의 겹치는 부분을 더하여 반환해줍니다.
import java.util.*;
class Solution {
public static int solution(String[] words) {
int answer = 0;
int value = 0;
ArrayList<String> al = new ArrayList<String>();
for(String word : words)
al.add(word);
Collections.sort(al);
value = len(al.get(0), al.get(1));
if(value < al.get(0).length())
answer += value + 1;
else
answer += value;
for(int i = 1; i < words.length - 1; i++) {
value = len(al.get(i), al.get(i-1));
value = Math.max(len(al.get(i), al.get(i+1)), value);
if(value < al.get(i).length())
answer += value + 1;
else
answer += value;
}
value = len(al.get(words.length - 2), al.get(words.length - 1));
if(value < al.get(words.length-1).length())
answer += value + 1;
else
answer += value;
return answer;
}
public static int len(String s1, String s2) {
int length = 0;
for(int i = 0; i < s1.length() && i < s2.length(); i++) {
if(s1.charAt(i) == s2.charAt(i))
length++;
else
break;
}
return length;
}
}
반응형
'문제풀이 > 백준 && 프로그래머스' 카테고리의 다른 글
[프로그래머스] 외벽 점검 (자바) (2) | 2020.08.25 |
---|---|
[프로그래머스] 자물쇠와 열쇠 (자바) (0) | 2020.08.23 |
[프로그래머스] [1차] 추석 트래픽 (자바) (0) | 2020.08.21 |
[프로그래머스] [1차] 비밀지도 (자바) (0) | 2020.08.17 |
[프로그래머스] [1차] 셔틀버스 (자바) (0) | 2020.08.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 프로젝트
- 면접
- 스프링부트
- 게시판
- 스프링
- 후기
- 레벨4
- 그래프이론
- 골드
- BFS
- 프로그래머스
- 최소스패닝트리
- 시뮬레이션
- 네이버
- dfs
- 백준
- 자바
- 코딩테스트
- 구현
- 카카오
- 트리
- 그래프탐색
- 실버
- 플레
- 브루트포스
- 신입
- 레벨2
- 레벨3
- 취준
- 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함