티스토리 뷰

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

간단한 문자열 문제이다.
이전에 등장한 단어를 부르거나, 마지막 영단어와 끝말잇기가 되지 않는 순간을 찾아야 한다. 몫과 나머지 연산으로 몇번째 사람의 몇번째 순서인지 간단하게 구할 수 있고, 현재까지 언급된 단어는 set을 통해 간단히 관리할 수 있다. 따라서 시간복잡도 O(NlogN)내에 문제를 해결해낼 수 있다.

import java.util.*;

class Solution {
    
    private Set<String> st = new HashSet<String>();
    private List<String> list = new ArrayList<>();
    
    public int[] solution(int n, String[] words) {
        int[] answer = {0, 0};

        for(int i=0; i<words.length; i++) {
            String word = words[i];
            System.out.println(word);
            if (st.contains(word) || isNotMatch(word)) {
                answer[0] = i%n + 1;
                answer[1] = i/n + 1;
                break;
            }
            else st.add(word);
            list.add(word);
        }

        return answer;
    }
    
    private boolean isNotMatch(String word) {
        if (list.isEmpty()) return false;
        String end = list.get(list.size()-1);
        if (end.charAt(end.length()-1) == word.charAt(0)) return false;
        return true;
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함