[영어 끝말잇기] https://programmers.co.kr/learn/courses/30/lessons/12981

풀고 느낀점
느낀건 쉬웠습니다. 문제를 읽자 마자 한 10분정도 생각하고 어떻게 물어야 할지 바로 떠올랐는데, 시간이 1시간 걸려버렸습니다. ^^;;;
2차배열로 만들어서 하나씩 순회하면서 Set 자료구조에 넣으면서 size가 다르면 중복되게 말한거니, 해당 index를 반환하면 끝이였습니다. 그런데 문제를 제대로 읽지 않아서 그런지, 끝말 잇기 규칙인 끝말이랑 시작말 체크하는 걸 빠뜨렸습니다. 실제 코딩 테스트 볼 때 진짜 주의해야겠습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package algorithms.online.programmers.skill; | |
import java.util.Arrays; | |
import java.util.HashSet; | |
import java.util.Set; | |
/** | |
* 영어 끝말잇기 (O) | |
* https://programmers.co.kr/learn/courses/30/lessons/12981 | |
*/ | |
public class Level2_4 { | |
public static void main(String[] args) { | |
Level2_4 level24 = new Level2_4(); | |
System.out.println(Arrays.toString(level24.solution(2, new String[]{"hello", "one", "even", "never", "now", "world", "draw"}))); | |
System.out.println(Arrays.toString(level24.solution(3, new String[]{"tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"}))); | |
System.out.println(Arrays.toString(level24.solution(5, new String[]{"hello", "observe", "effect", "take", "either", "recognize", "encourage", | |
"ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"}))); | |
} | |
public int[] solution(int n, String[] words) { | |
int len = (words.length / n) + (words.length % n); | |
String[][] cache = new String[n][len]; | |
for (int i = 0; i < n; i++) { | |
for (int j = 0; j < len; j++) { | |
if (i + (j * n) < words.length) { | |
cache[i][j] = words[i + (j * n)]; | |
} | |
} | |
} | |
Set<String> valid = new HashSet<>(); | |
int size = 1; | |
String before = ""; | |
for (int i = 0; i < cache[0].length; i++) { | |
for (int j = 0; j < n; j++) { | |
if (i == 0 && j == 0) { | |
valid.add(cache[j][i]); | |
before = cache[j][i]; | |
} else { | |
char be = before.charAt(before.length() - 1); | |
char af = cache[j][i].charAt(0); | |
if (be != af) { | |
return new int[]{j + 1, i + 1}; | |
} | |
valid.add(cache[j][i]); | |
before = cache[j][i]; | |
size++; | |
if (valid.size() != size) { | |
return new int[]{j + 1, i + 1}; | |
} | |
} | |
} | |
} | |
return new int[]{0, 0}; | |
} | |
} |
'Study with book > Algorithms' 카테고리의 다른 글
[2021 카카오 블라인드 온라인 코딩 테스트] 메뉴 리뉴얼(0) | 2021.04.02 |
---|---|
[프로그래머스] JadenCase 문자열(0) | 2021.04.02 |
[프로그래머스] 해시 > 위장(0) | 2021.03.30 |
[2020 카카오 블라인드 온라인 코딩 테스트] 괄호 변환(0) | 2021.03.30 |
[2020 카카오 블라인드 온라인 코딩 테스트] 문자열 압축(0) | 2021.03.30 |