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

2022. 4. 4. 18:37·프로그래머스/Level 2

문제

문제가 너무 길어서 링크를 남긴다.

https://programmers.co.kr/learn/courses/30/lessons/12981

 

코딩테스트 연습 - 영어 끝말잇기

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

 

풀이코드

public int[] solution(int n, String[] words) {      //영어 끝말잇기
    int[] answer = {0,0};
    if(words[0].length() == 1){                     //만약 처음의 단어 길이가 1이면 그대로 return
        answer[0] = 1;
        answer[1] = 1;
        return answer;
    }else {                                         //처음의 단어 길이가 1이 아닐 경우,
        char first;                                 //first에 단어의 첫글자를 넣을 변수를 선언
        char last = words[0].charAt(words[0].length() - 1); //last에 단어의 마지막 글자를 넣고
        Set<String> set = new HashSet<String>();    //중복을 체크할 set을 선언
        set.add(words[0]);                          //set에 첫번째 단어를 넣는다.
        for (int i = 1; i < words.length; i++) {    //두번째 단어부터 check
            set.add(words[i]);                      //set에 단어를 넣고
            first = words[i].charAt(0);             //first에 단어의 첫글자를 넣는다.
            if (last != first || set.size() != i + 1 || words[i].length()==1) { //설명 참고
                answer[0] = (i % n) + 1;            //index%n로 몇번째 사람인지 구하고 그게 index값이므로 +1
                answer[1] = (i / n) + 1;            //index/n으로 몇 번 반복했는지 구하고 그게 index값이므로 +1
                break;
            }
            last = words[i].charAt(words[i].length() - 1);  //last에 단어의 마지막 글자를 넣는다.
        }
    }
    return answer;
}

이것이 따질 것이 많아 까다로운 문제라서 문제를 풀고 나서 내 풀이코드보다 좋은 코드가 있나 싶어서 다른 사람들의 코드를 봤다.

근데 사람들이 왜

5번 조건을 아무도 안따지고 풀었는지... 테스트 케이스로 한 글자인 단어가 제일 처음있을 때, 혹은 중간에 있을 때를

대입해봤더니 다른 사람의 풀이코드중에 맞는 것이 몇 개 없었다...

그래서 내 풀이는 우선 한 글자인 단어가 제일 처음에 있을 경우 바로 return을 해주고

그게 아닐 경우를 가정해서 풀었고 나머지는 주석의 풀이를 보면 되지만

if (last != first || set.size() != i + 1 || words[i].length()==1) { //설명 참고
    answer[0] = (i % n) + 1;
    answer[1] = (i / n) + 1;
    break;
}

 이 부분은

last != first -> 그 전단어의 마지막 부분과 지금 단어의 첫번째가 다를 경우

set.size() != i + 1 -> set에 저장한 단어들이 중복되서 i+1과 다를 경우

words[i].length()==1 -> 단어가 한 글자인 경우

이 3가지 경우에는 바로 answer배열에 값들을 넣어주고 반복문을 탈출하고 answer을 return한다.

저작자표시 비영리 (새창열림)

'프로그래머스 > Level 2' 카테고리의 다른 글

[프로그래머스][Level2][Java] 짝지어 제거하기  (0) 2022.04.14
[프로그래머스][Level2][Java] 점프와 순간이동  (0) 2022.04.08
[프로그래머스][Level2][Java] n^2배열 자르기  (0) 2022.04.04
[프로그래머스][Level2][Java] 스킬트리  (0) 2022.04.01
[프로그래머스][Level2][Java] 방문 길이  (0) 2022.04.01
'프로그래머스/Level 2' 카테고리의 다른 글
  • [프로그래머스][Level2][Java] 짝지어 제거하기
  • [프로그래머스][Level2][Java] 점프와 순간이동
  • [프로그래머스][Level2][Java] n^2배열 자르기
  • [프로그래머스][Level2][Java] 스킬트리
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level2][Java] 영어 끝말잇기
    상단으로

    티스토리툴바