일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 가운데 글자 가져오기 파이썬
- codeup 1020 자바
- 빅분기실기
- docker 완전 삭제
- 최소 스패닝 트리 자바
- 청년 Ai Big Data 아카데미
- docker remove
- 빅데이터분석기사
- 나누어 떨어지는 숫자 배열 python
- m1 docker
- 가운데 글자 가져오기 java
- 프로그래머스 나누어 떨어지는 숫자 배열 자바
- 프로그래머스 나누어 떨어지는 숫자 배열 파이썬
- 트리의 지름 java
- 최단 경로 알고리즘
- 청년 AI Big Data 아카데미 13기
- 나누어 떨어지는 숫자 배열 java
- 가운데 글자 가져오기 자바
- 코드업 1020 자바
- docker 삭제
- m1 docker install
- 프로그래머스 가운데 글자 가져오기 python
- 코드업 1020 java
- 트리의 지름 자바
- 가운데 글자 가져오기 파이썬
- 가운데 글자 가져오기 python
- 핸즈온 머신러닝
- 최소 스패닝 트리
- codeup 1020 java
- 프로그래머스 가운데 글자 가져오기 자바
- Today
- Total
NineTwo meet you
[프로그래머스/자바] [3차] 자동완성 본문
문제 설명
자동완성
포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g 만 입력해도 go를 추천해주므로 o를 입력할 필요가 없어진다! 단, 학습에 사용된 단어들 중 앞부분이 같은 경우에는 어쩔 수 없이 다른 문자가 나올 때까지 입력을 해야 한다.
효과가 얼마나 좋을지 알고 싶은 라이언은 학습된 단어들을 찾을 때 몇 글자를 입력해야 하는지 궁금해졌다.
예를 들어, 학습된 단어들이 아래와 같을 때
go gone guild
- go를 찾을 때 go를 모두 입력해야 한다.
- gone을 찾을 때 gon까지 입력해야 한다. (gon이 입력되기 전까지는 go 인지 gone인지 확신할 수 없다.)
- guild를 찾을 때는 gu 까지만 입력하면 guild가 완성된다.
이 경우 총 입력해야 할 문자의 수는 7이다.
라이언을 도와 위와 같이 문자열이 입력으로 주어지면 학습을 시킨 후, 학습된 단어들을 순서대로 찾을 때 몇 개의 문자를 입력하면 되는지 계산하는 프로그램을 만들어보자.
입력 형식
학습과 검색에 사용될 중복 없는 단어 N개가 주어진다.
모든 단어는 알파벳 소문자로 구성되며 단어의 수 N과 단어들의 길이의 총합 L의 범위는 다음과 같다.
- 2 <= N <= 100,000
- 2 <= L <= 1,000,000
출력 형식
단어를 찾을 때 입력해야 할 총 문자수를 리턴한다.
입출력 예제
words | result |
[go,gone,guild] | 7 |
[abc,def,ghi,jklm] | 4 |
[word,war,warrior,world] | 15 |
입출력 설명
- 첫 번째 예제는 본문 설명과 같다.
- 두 번째 예제에서는 모든 단어들이 공통된 부분이 없으므로, 가장 앞글자만 입력하면 된다.
- 세 번째 예제는 총 15 자를 입력해야 하고 설명은 아래와 같다.
- word는 word모두 입력해야 한다.
- war는 war 까지 모두 입력해야 한다.
- warrior는 warr 까지만 입력하면 된다.
- world는 worl까지 입력해야 한다. (word와 구분되어야 함을 명심하자)
설명
트라이 트리를 이용해 문제를 해결할 수 있다.
root를 기준으로 한 글자씩 넣어준다.
root _ g _ o _ n _ e
|_ u _ i _ l _ d
이때 해당 글자가 몇 번 count도 함께 세준다.
root _ g (3)_ o (2) _ n (1) _ e (1)
|_ u (1) _ i (1) _ l (1) _ d (1)
go의 경우
긴 글 자에 포함되는 작은 글자의 경우 작은 글자의 크기(파란색 부분)만큼 count 되는 것을 확인할 수 있다.
root _ g (3)_ o (2) _ n (1) _ e (1)
|_ u (1) _ i (1) _ l (1) _ d (1)
gone의 경우
긴 글 자의 경우 작은 글자의 크기가 끝나고 1이 시작되는 부분(파란색 부분)까지 count 되는 것을 확인할 수 있다.
root _ g (3)_ o (2) _ n (1) _ e (1)
|_ u (1) _ i (1) _ l (1) _ d (1)
guild의 경우
gone과 마찬가지로 작은 글자의 크기가 끝나고 1이 시작되는 부분(파란색 부분)까지 count되는 것을 확인할 수 있다.
root _ g (3)_ o (2) _ n (1) _ e (1)
|_u (1)_ i (1) _ l (1) _ d
코드
'프로그래밍 문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/자바] 배달 (0) | 2021.05.06 |
---|---|
[프로그래머스/자바] 게임 맵 최단거리 (0) | 2021.05.04 |
[프로그래머스/자바] 메뉴 리뉴얼 (0) | 2021.02.04 |
[프로그래머스/자바] 합승 택시 요금 (0) | 2021.02.04 |
[프로그래머스/자바] 순위 (0) | 2021.02.04 |