(Java) 프로그래머스 - 영어 끝말잇기

2022. 9. 8. 19:49·코딩 테스트

쉬운 문제였다.

조건이 복잡하지도 않고 입력이 길지도 않아 문제를 읽자마자 바로 풀이를 시작해서 20분 정도 걸려서 맞췄다.

 

로직은 말한 단어를 저장하는 리스트와 각 사람이 말한 횟수를 카운트하는 map을 선언하고 초기화한다.

그리고 words 배열을 순회하며 올바른 단어인지 검사하고 결과를 반환한다.


최종 코드

import java.util.*;
class Solution {
    static List<String> list;
    public int[] solution(int n, String[] words) {
        int[] answer = new int[2];
        
        // 단어를 저장하는 list
        list = new ArrayList<>();
        // 말한 횟수를 카운트하는 map
        Map<Integer, Integer> map = new HashMap<>();
        
        // map 초기화
        for (int i = 1; i <= n; i++) {
            map.put(i, 0);
        }
        
        // 순서를 카운트하는 변수
        int order = 1;
        for (int i = 0; i < words.length; i++) {
            // 찻번째 단어일 경우
            if(i == 0) {
                list.add(words[i]);
                map.put(order, map.getOrDefault(order, 0) + 1);
                order++;
                continue;
            }
            
            // 순서가 n보다 커지면 1로 초기화
            if(order > n) {
                order = 1;
            }
            
            // 올바른 단어 체크 메서드 호출
            if(!check(words[i], i)) {
                map.put(order, map.getOrDefault(order, 0) + 1);
                answer[0] = order;
                answer[1] = map.get(order);
                break;
            }
            
            // 단어 list에 삽입
            list.add(words[i]);
            // 말한 횟수 카운트
            map.put(order, map.getOrDefault(order, 0) + 1);
            // 순서 증가
            order++;
        }
        return answer;
    }
    // 올바른 단어인지 체크하는 메서드
    static boolean check(String s, int idx) {
        // 단어의 길이가 1보다 작다면
        if(s.length() <= 1) {
            return false;
        }

        // 이미 말한 단어가 있다면
        if(list.contains(s)) {
            return false;
        }

        // 이전 단어의 마지막과 현재 단어의 첫번째가 같은지 확인
        char temp = list.get(idx - 1).charAt(list.get(idx - 1).length() - 1);
        if(temp != s.charAt(0)) {
            return false;
        }

        // 올바른 단어일 경우
        return true;
    }
}

 

저작자표시 (새창열림)

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 - n^2 배열 자르기  (0) 2022.09.15
(Java) 프로그래머스 - 점프와 순간 이동  (0) 2022.09.11
(Java) 프로그래머스 - 이진 변환 반복하기  (0) 2022.09.08
(Java) 프로그래머스 - 삼각 달팽이  (0) 2022.09.07
(Java) 프로그래머스 - 2개 이하로 다른 비트  (0) 2022.09.06
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 - n^2 배열 자르기
  • (Java) 프로그래머스 - 점프와 순간 이동
  • (Java) 프로그래머스 - 이진 변환 반복하기
  • (Java) 프로그래머스 - 삼각 달팽이
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 영어 끝말잇기
상단으로

티스토리툴바