[프로그래머스] Lv2 영어 끝말잇기

changi123·2023년 8월 24일
1
post-thumbnail

문제설명

코드

import java.util.*;
class Solution {
    public int[] solution(int n, String[] words) {
		int[] answer = new int[2];
		int [] h= new int [n];
		
		Stack st = new Stack();
		List list = new ArrayList();
		list.add(words[0]);
		
		
		for(int i= 0; i<words.length;i++) {
			if(i==0) {
				h[i%n]++;
				continue;
			}
			h[i%n]++;
			st.push(words[i-1].charAt(words[i-1].length()-1));
			char c= (char)st.peek();
			if(words[i].charAt(0) == c) {
				if(list.contains(words[i])) {
					answer[0]= (i%n)+1;
					answer[1]= h[i%n];
					break;
				}
				list.add(words[i]);
				st.pop();
				
				if(i==words.length-1) {
					answer[0]= 0;
					answer[1] = 0;
				}
			} else {
				
				answer[0]= (i%n)+1;
				answer[1]= h[i%n];
				break;
			}
		}
		return answer;
    }
}

내 코드 설명

(1) 비교하기위한 스택 객체 st 선언, 불렀던 단어인지 포함여부를 확인하기 위한 리스트 객체 선언
첫 번째는 무조건 불렸기 때문에 words[0] 단어는 먼저 리스트에 추가, 각 사람의 순번에 따른 횟수를 체크하기위한 h 배열 선언
(2) 첫 번째는 무조건 한 번 부르기 때문에 첫 번째 사람의 횟수 증가
(3) 각 자리의 마지막 알파벳 스택 객체에 추가하여 다음 알파벳에 첫 번째와 같은지 체크하여 해당 단어 포함여부 체크 후 각 자리 증가

다른 사람 풀이

import java.util.HashSet;

class Solution {


    public int[] solution(int n, String[] words) {
      int[] answer = { 0, 0 };
        char chEnd = words[0].charAt(words[0].length() - 1);
        char chStart;
        System.out.print(chEnd + " ");
        HashSet<String> log = new HashSet<>();
        log.add(words[0]);
        for (int i = 1; i < words.length; i++) {
            chStart = words[i].charAt(0);
            log.add(words[i]);
            if (chEnd != chStart || log.size() != i + 1) {
                System.out.print(i + 1 + "!");
                answer[0] = (i % n)+1;
                answer[1] = (i / n) + 1;
                break;
            }

            chEnd = words[i].charAt(words[i].length() - 1);
            System.out.print(chEnd + " ");
        }
        System.out.println();
        System.out.println("(" + answer[0] + ", " + answer[1] + ")");
        return answer;
    }
}

다른 사람 코드 설명

(1) 중복 체크할 때 HashSet도 사용 가능하다는 걸 알아두자

느낀점

스택을 사용해보니 비교하여 체크할 때 스택을 사용하는 것이 좋다고 느껴졌다. 근데 아직 스택 활용하는 알고리즘에 많이 익숙하지 않은 것 같다.. 시간이 들었는데 다른 사람이 스택을 활용하여 푼 건 거의 없는 것 같다. 시간복잡도, 효율성 측면에서 HashSet 쓰는 것이 더 효율적이니 다음엔 HashSet을 활용해서 풀어보자

profile
개발자 홍찬기 꾸준한 사람이 되자

1개의 댓글

comment-user-thumbnail
2023년 8월 24일

코테 공부 파이팅입니다!!

답글 달기

관련 채용 정보