본문 바로가기

알고리즘 (2020 : 08 : 10 ~ )/Trie

(7)
[백준 / BOJ] 19585 전설 (cpp / Java) 문제 출처 : https://www.acmicpc.net/problem/19585 19585번: 전설 Sogang ICPC Team에는 색상 이름과 닉네임의 순서로 이여서 팀명을 지으면 ICPC 리저널에서 수상할 수 있다는 전설이 있다. 색상 이름들과 닉네임들이 주어질 때, Q개의 팀에 대해 다음 리저널에서 수 www.acmicpc.net C개의 색상, N개의 닉네임, Q개의 팀이 주어진다. 이때, Q개의 팀중 색상+닉네임 으로 이루어진 팀은 "Yes" 아닌경우 "No"를 출력하는 문제다. 풀이 Trie + 해싱 알고리즘으로 푼 문제다. 색상과 닉네임을 모두 Trie구조로 만들경우, 색상의 최대길이 * 닉네임의 최대길이 * 팀의 최대 갯수 = 1000 * 1000 * 20000이 되어서 TLE가 나온다...
[programmers/kakao] [3차] 압축 (Java/Trie) 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/17684 코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 알파벳 'A' - 'Z'로 이루어진 사전과 문자열 msg가 주어진다. 이 msg의 문자중 사전과 최장 일치하는 문자를 찾고, 문자열이 일치하지않는다면, 사전에 추가하며, 일치하는 문자열의 Index(색인 번호)를 출력하는 문제다. 풀이 우선 이 문제에서 msg의 길이는 최대 1,000이다. 완전탐색으로 구현할 경우, 최악의 경우는 (아마)다음과 같을것 이다. msg : ..
[programmers/kakao] [3차] 자동완성 (Java) 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/17685?language=java 코딩테스트 연습 - [3차] 자동완성 자동완성 포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g programmers.co.kr 검색어 자동완성 기능을 만들고, 모든 문자를 찾기위해서 최소 몇번 타이핑해야하는지 찾는 문제다. 풀이 전형적인 Trie 문제였다 모든 단어의 길이를 합쳤을때 최대 1,000,000길이가 나오니 Trie 구조를 만드는데, 1,000,000번 반복하며, 모든 단어의 길이의 합이 최대 1,000,000 이므로 ..
[백준 / BOJ] 18119 단어 암기 - Trie 문제 출처 : www.acmicpc.net/problem/18119 18119번: 단어 암기 준석이는 영어 단어를 외우려고 한다. 사전에는 N가지 단어가 적혀 있다. 모든 단어는 소문자이다. 단어 안에 있는 모든 알파벳을 알 때, 그 단어를 완전히 안다고 한다. 다음과 같은 쿼리들이 주 www.acmicpc.net 준석이가 영어단어를 외울려고한다. 사전에 N가지 단어가적혀있으며, 모든 단어는 소문자로만 이루어져있다. 준석이는 처음에 모든 알파벳을알고있지만, 쿼리가 주어질때마다 알파벳을 까먹을수도 까먹은 단어를 기억할수도있다. 단어장에 적혀있는 N개의 단어와 M번의 쿼리 가 주어졌을때, 각 쿼리마다 준석이가 기억하는 단어의 개수를 출력하는 문제다. 풀이 최악의 경우, N = 10000 이때 각 단어의 길이..
[백준 / BOJ] 9202 Boggle 문제 출처 : www.acmicpc.net/problem/9202 9202번: Boggle 각각의 Boggle에 대해, 얻을 수 있는 최대 점수, 가장 긴 단어, 찾은 단어의 개수를 출력한다. 한 Boggle에서 같은 단어를 여러 번 찾은 경우에는 한 번만 찾은 것으로 센다. 가장 긴 단어가 여러 개 www.acmicpc.net 각칸에 알파벳 대문자가 적혀있는 보드가 주어졌을때 단어를 찾는 게임을 하려고한다. w개의 찾을 단어가 주어지고, 각 칸마다 알파벳 대문자가 적혀있는 b개의 4*4 보드가 주어졌을때, 가장 많이 얻는 점수 , 가장 긴 문자열, 가장 많이 찾을수있는 단어의 수 를 구하는 문제다. (이동은 현재위치에서 8방향(가로, 세로, 대각선)으로 갈수있다.) 풀이 일반적인 완탐만 사용할경우, 최..
[백준 / BOJ] 14725 개미굴 문제 출처 : www.acmicpc.net/problem/14725 14725번: 개미굴 첫 번째 줄은 로봇 개미가 각 층을 따라 내려오면서 알게 된 먹이의 정보 개수 N개가 주어진다. (1 ≤ N ≤ 1000) 두 번째 줄부터 N+1 번째 줄까지, 각 줄의 시작은 로봇 개미 한마리가 보내준 먹이 www.acmicpc.net 로봇 개미가 개미굴 입구에서 각 층을따라 내려오며 먹이를 탐색한다. 이때 로봇 개미 발견한 먹이를 순서대로 알고있을때, 개미굴의 구조를 출력하는 문제다. 풀이 처음에는 기본적인 그래프 탐색으로 풀수있겠다 생각했는데, 시간초과가 난다. Trie를 사용안하면, 자신과 연결된 개미굴이 자신이 찾고있는 개미굴인지 매 탐색마다 확인해야하므로 15번 반복하고, 문자의 갯수는 총 15000개가 ..
[백준 / BOJ] 5052 전화번호 목록 문제 출처 : www.acmicpc.net/problem/5052 5052번: 전화번호 목록 문제 전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오. 전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없� www.acmicpc.net 전화번호 목록을 입력받았을때, 그 목록이 일관성이 있나 없나 구하는 문제다. 예를들어 A = 911 B = 9123 C = 91 1234 를 입력받았을때, C에게 전화할려고 전화번호를 누르면 911을 누르는순간 A에게 전화가 가므로 일관성이없는 목록이다. 풀이 Trie알고리즘을 배우고 풀었는데, 새로운 알고리즘이라기 보다 구조체를 응용하는 느낌이였다. 구조체를 선언하고 그 구조체에 자판 배열을 할당한..