컴퓨터 프로그래밍/알고리즘
프로그래머스-영어 끝말잇기
깝돌이
2020. 6. 9. 13:45
https://programmers.co.kr/learn/courses/30/lessons/12981?language=java
코딩테스트 연습 - 영어 끝말잇기
3 [tank, kick, know, wheel, land, dream, mother, robot, tank] [3,3] 5 [hello, observe, effect, take, either, recognize, encourage, ensure, establish, hang, gather, refer, reference, estimate, executive] [0,0]
programmers.co.kr
<내풀이>
1. hashset은 중복이 없으므로, 안에 집어 넣을 때 이미 기존에 있는 값이면, false를 리턴합니다.
2. 첫번째 값은 그냥 hashset에 넣어주고, 두번째 부터 앞에 문자열의 끝과 문자열의 시작의 문자가 같은이 확인합니다.
3. 그리고 hashset에 들어가는지 확인합니다.
4. 끝문자와 시작 문자가 같지 않거나, hashset에 들어가지 않으면, answer[0]에는 몇번 째에 됐는지 넣고, answer[1]에는 몇번째 사람인지 정보를 넣습니다. 그리고 그것을 리턴해줍니다.
5. for안에서 return 값이 없으면 초기화 되어 있는 값이 {0,0}을 리턴합니다.
package algorithm_2;
import java.util.HashSet;
public class l15 {
public static int[] solution(int n, String[] words) {
int[] answer = new int[2];
HashSet<String> wordsSet = new HashSet<>();
for (int i = 1; i < words.length; i++) {
wordsSet.add(words[0]);
if (!(words[i - 1].substring(words[i - 1].length() - 1).equals(words[i].substring(0, 1)))
|| !wordsSet.add(words[i])) {
answer[1]=i/n+1;
answer[0]=i%n+1;
return answer;
}
}
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
System.out.println("Hello Java");
return answer;
}
public static void main(String[] args) {
int n = 3;
String[] words = {"tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"};
System.out.println(solution(n, words)[0] );
System.out.println(solution(n, words)[1] );
}
}
<남풀이>
저는 subString을 썻는데, charAt(index)가 있습니다...... 이걸 사용해야겠습니다.
import java.util.Arrays;
import java.util.List;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = { 0, 0 };
String[] temp = new String[words.length];
Arrays.fill(temp, "");
for(int i = 0; i < words.length; i++) {
if((i != 0 && words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0)) ||
Arrays.asList(temp).contains(words[i])) {
answer[0] = i%n + 1;
answer[1] = i/n + 1;
break;
} else {
temp[i] = words[i];
}
}
return answer;
}
}