[프로그래머스][Java] Lv.2 영어 끝말잇기

2023. 6. 10. 23:35·Algorithms(CT)

사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요.

 

예시

n = 3일 때, 

tank → kick → know → wheel → land → dream → mother → robot → tank 순으로 말한다고 한다면,

사람1   사람2   사람3     사람1      사람2   사람3      사람1        사람2     사람3

 

3번째 사람이 3번째 말할 때, 중복된 단어를 말해서 탈락한다.

따라서 출력되는 값은 [3, 3] 이다.


풀이과정

  1. 주어진 단어들을 하나씩 검사한다.
  2. 일단 첫번째로 들어온 문자열이면 검사 없이 set에 집어넣고 마지막 문자를 저장한다.
  3. 다음 문자열부터 (끝말이 이어지는지 검사)하고 (중복된 문자열인지) 확인한다.
  4. 3번 조건에 걸린다면 해당 문자열을  몇번째 사람이 말했고, 그 사람이 몇번째로 말한 단어인지 계산한다.
  5. 몇번째 사람이 말했는지
    -> n명이 돌아가면서 말하기 때문에 i%n+1이다.
    ( * 사람 수를 1부터 세기 때문에 i%n값에 +1을 해준다.)
  6. 몇 번째로 말한 단어인지
    -> n명 말하고, 그 다음 n명이 다시 말하고, .. 로 반복되므로 i/n의 몫+1이다.
    ( * 몇 번째로 말한 것인지도 1부터 세기 시작하므로 +1해준 것임.)
  7. 탈락하는 사람이 없다면 초기화 했던 값 [0,0]을 반환하고, 그렇지 않다면 4-6에 걸쳐서 계산한 값을 반환한다.

전체 코드

import java.util.*;
class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = {0,0};

        Set<String> set = new HashSet<>(); //단어의 중복 확인 set.
        
        char last='r'; //마지막 글자
        for(int i=0;i<words.length;i++){
            if(i!=0){//첫번째 단어가 아니고
                //마지막 글자가 이어지지 않거나 중복된 단어이면
                if(words[i].charAt(0)!=last ||
                        set.contains(words[i])){
                    answer[0]=i%n+1; //몇번째 사람인지 구하고, (0,1,2)번째 사람->(1,2,3)
                    answer[1]=i/n+1; //몇번째 차례인지
                    System.out.println(words[i]);
                    break;
                }
            }
            set.add(words[i]);//단어 중복 확인하기 위해 저장
            last = words[i].charAt(words[i].length()-1);//마지막 글자 저장
        }

        return answer;
    }
}

'Algorithms(CT)' 카테고리의 다른 글

[프로그래머스][Java] Lv.3 여행경로  (0) 2023.06.12
[프로그래머스][Java] Lv.3 단어 변환  (0) 2023.06.11
[프로그래머스][Java] Lv.2 게임 맵 최단거리  (0) 2023.06.09
[프로그래머스][Java] Lv.2 짝지어 제거하기  (0) 2023.06.08
[프로그래머스][Java] Lv.2 피보나치 수  (0) 2023.06.07
'Algorithms(CT)' 카테고리의 다른 글
  • [프로그래머스][Java] Lv.3 여행경로
  • [프로그래머스][Java] Lv.3 단어 변환
  • [프로그래머스][Java] Lv.2 게임 맵 최단거리
  • [프로그래머스][Java] Lv.2 짝지어 제거하기
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    IT 잡학사전
    Lv.1
    구름
    따라하며 배우는 html css
    LV.3
    java
    Greedy
    그리디
    lv.4
    DFS
    자바
    스택
    BFS
    개발자북클럽
    코딩테스트
    LV.2
    인프런
    제대로 파는 자바스크립트
    존안님
    lv2
    IT 5분 잡학사전
    BOJ
    구름톤 챌린지
    노마드코더
    DP
    호텔 대실
    프로그래머스
    Til
    백준
    HTML
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스][Java] Lv.2 영어 끝말잇기
상단으로

티스토리툴바