Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

953. Verifying an Alien Dictionary (외계인 사전 검증하기) 본문

코딩 테스트/LeetCode

953. Verifying an Alien Dictionary (외계인 사전 검증하기)

포카리tea 2023. 2. 28. 16:53

외계어에서는 놀랍게도 영어 소문자도 사용하지만 order가 다를 수 있습니다. 알파벳의 order는 소문자의 순열입니다.

외계어로 쓰여진 일련의 words와 알파벳의 order가 주어지면 주어진 words가 이 외계 언어에서 알파벳의 order로 정렬된 경우에만 true를 반환합니다.

예시 1:

입력: words = ["hello","leetcode"], order = "hlabcdefgijkmnopqrstuvwxyz"
출력: true
설명: 이 언어에서는 'h'가 'l'앞에 오므로 정렬된 순서입니다.

예시 2:

입력: words = ["word","world","row"], order = "worldabcefghijkmnpqstuvxyz"
출력: false
설명: 이 언어에서는 'd'가 'l' 다음에 오므로 words[0] > words[1]이므로 정렬되지 않은 순서입니다.

예시 3:

입력: words = ["apple","app"], order = "abcdefghijklmnopqrstuvwxyz"
출력: false
설명: 처음 세 문자 "app"이 일치하고 두 번째 문자열은 짧습니다. (크기) 사전식 규칙에 따르면 "apple" > "app"입니다. 'l' > '∅'이기
때문에 '∅'는 다른 문자보다 작은 문자 공백으로 정의됩니다. (추가정보)

 

조건:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 20
  • order.length == 26
  • words[i]와 order안의 모든 문자들은 영소문자입니다.

정답:

public class Solution {
    public bool IsAlienSorted(string[] words, string order) {
        for (int i = 0; i < words.Length - 1; i++)
        {
            if (!inorder(words[i], words[i + 1], order))
            {
                return false;
            }
        }

        return true;
    }

    private bool Inorder(String s1, String s2, string order)
    {
        for (int i = 0; i < s1.Length && i < s2.Length; i++)
        {
            int index1 = order.IndexOf(s1[i]);
            int index2 = order.IndexOf(s2[i]);

            if (index1 < index2)
            {
                return true;
            }
            else if (index1 > index2)
            {
                return false;
            }
        }

        return s1.Length <= s2.Length;
    }
}

해설: 

Inorder 함수에 두 string값을 넣고 i번째 숫자가 order 값에서 몇 번째에 있는지 찾은 후 index값이 s1이 작으면 true, s2가 작으면 false를 리턴해주었습니다.