본문 바로가기
Java/알고리즘

영어 끝말잇기

by 티코딩 2023. 10. 11.

먼저 코드를 이렇게 짰다.

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = {0, 0};
        int idx = 0;
        Set<String> set = new HashSet<>();
        for (int i = 0; i < words.length; i++) {
            if (!set.add(words[i])) {  // set에 추가할 수 없다면 중복된 단어이므로
                idx = i;  // 해당 인덱스를 반환
            }
            if(i >= 1){
                if(words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0)){
                    idx = i;
                }
            }

            if (idx != 0) {
                    if ((idx+1) % n == 0) {
                        answer[0] = n;
                    } else {
                        answer[0] = (idx+1) % n;
                    }
                    if((idx+1) % n != 0){
                        answer[1] = (idx+1)/n+1;
                    }else{
                        answer[1] = (idx+1)/n;
                    }
            }
        }
        return answer;
        }
}

이 코드로 테스트를 돌려보니 정확도 테스트에서 30점이 나왔다.. 뭐가 문제인가 보고

다시 고쳐봤다.

이전 코드에서 나는 idx를 구하는 조건두개를 한번에 잡지않고 따로 잡으려고 했던게 일단 문제였다.

idx를 구하는 조건 1. 중복되면 그 인덱스가 idx 가 된다. 2. 앞단어의 마지막 글자와 현재 단어의 첫글자가 다르면 인덱스가 idx가 된다.

answer에 0과 1위치에 넣는 기준도 잘못생각했다. 0위치에는 탈락한 사람의 번호가 들어가야하므로 탈락한 위치인 idx 에 나머지연산 n을 한 값에 1을 더해주면 탈락한 사람의 번호가 되고, 1위치에는 탈락한 차례가 들어가야하니 idx 몫연산 n 한 값에 1을 더해주면 된다.

class Solution {
    public int[] solution(int n, String[] words) {
        int[] answer = {0, 0};
        int idx = 0;
        Set<String> set = new HashSet<>();
        for (int i = 0; i < words.length; i++) {
            // 탈락 조건 확인
            if (!set.add(words[i]) || (i > 0 && words[i-1].charAt(words[i-1].length()-1) != words[i].charAt(0))) {
                idx = i;
                break;
            }
        }

            if (idx != 0) {
            answer[0] = (idx % n) + 1;  // 탈락한 사람의 번호
            answer[1] = (idx / n) + 1;  // 탈락한 차례
        }

        return answer;
        }
}

조건이 여러개일때, 두 조건다 만족하거나, 한조건이라도 만족할때 멈춰야한다면 조건문 하나로 다 해결을 하는게 훨씬 짧고 보기도 편하기 때문에 앞으로 이렇게 작성을 해야겠다 맘먹었다.

'Java > 알고리즘' 카테고리의 다른 글

H-Index  (0) 2023.10.13
숫자의 표현  (0) 2023.10.12
올바른 괄호  (0) 2023.10.11
전화번호 목록  (0) 2023.06.07
할인행사  (0) 2023.05.26