Problem solving/Algorithms

[LeetCode] 14. Longest Common Prefix (C#)

Young_A 2021. 1. 25. 05:53

๋ชฉ์ฐจ

    LeetCode - Problems - Algorithms - 14. Longest Common Prefix

    Problem Description

    Write a function to find the longest common prefix string amongst an array of strings.

    If there is no common prefix, return an empty string "".

    Example 1:

    • Input: strs = ["flower","flow","flight"]
    • Output: "fl"

    Example 2:

    • Input: strs = ["dog","racecar","car"]
    • Output: ""
    • Explanation: There is no common prefix among the input strings.

    Constraints:

    • 0 <= strs.length <= 200
    • 0 <= strs[i].length <= 200
    • strs[i] consists of only lower-case English letters.

    My Solution (C#)

    public class Solution {
        public string LongestCommonPrefix(string[] strs)
        {
            if (strs.Length == 0)
            {
                return "";
            }
    
            string temp;
            for (int i = 0; i < strs[0].Length; i++)
            {
                temp = strs[0].Substring(i, 1);
    
                for (int j = 1; j < strs.Length; j++)
                {
                    if (strs[j].Length == i || temp != strs[j].Substring(i, 1))
                    {
                        return strs[0].Substring(0, i);
                    }
                }
            }
            return strs[0];
        }
    }

    ์ฃผ์–ด์ง„ string array ์š”์†Œ๋“ค์˜ ๊ณตํ†ต ์ ‘๋‘์‚ฌ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.

    string array๋ฅผ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ๊ณผ, ๊ฐ ๋‹จ์–ด์˜ letter๋“ค์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ ๋‘ ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

    ๋ณดํ†ต ์ด๋Ÿฐ ๋น„๊ต๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด array index๋ฅผ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— array ์š”์†Œ ๋‚ด์˜ index๋ฅผ ์œ„ํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋Œ€๋กœ ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ํŽธ๋ฆฌํ•˜๋‹ค.

     

    ์šฐ์„ ์€ strs array์— ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ if ๋ฌธ์„ ์ด์šฉํ•ด ๊ฐ€์žฅ ๋จผ์ € ๊ฑธ๋Ÿฌ์ค€๋‹ค.

     

    ์ดํ›„ ๋น„๊ต๋ฅผ ์œ„ํ•œ ์ž„์‹œ string ๊ฐ’, temp๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๊ณ  ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์‹œ์ž‘ํ–ˆ๋‹ค.

    ๋ชจ๋“  array ์š”์†Œ์˜ ๊ณตํ†ต ์ ‘๋‘์‚ฌ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์ œ์ผ ์ฒซ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ letter๋ฅผ ์ฐธ๊ณ ํ•  for ๋ฐ˜๋ณต๋ฌธ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด ๋•Œ temp์— ๋น„๊ตํ•  ๋ฌธ์ž๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค.

     

    ๊ทธ ์•ˆ์— strs array์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ™•์ธ ํ•˜๋Š” ๋‚ด๋ถ€ ๋ฐ˜๋ณต๋ฌธ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    (strs array์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ์˜ letter๋Š” ์ด๋ฏธ temp์— ๋Œ€์ž…ํ–ˆ์œผ๋ฏ€๋กœ index ๊ฐ’์ธ j๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.)

    ์™ธ๋ถ€ ๋ฐ˜๋ณต๋ฌธ์˜ i๊ฐ’ (๋น„๊ต letter์˜ index ๊ฐ’)์„ ์ด์šฉํ•ด ๋ชจ๋“  ์š”์†Œ๋“ค์˜ i ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” letter๋“ค์„ ๋น„๊ตํ•ด์ค€๋‹ค.

     

    ๋น„๊ตํ•˜๊ธฐ ์ „์— ์ฃผ์˜ํ•ด์•ผํ•  ์ : ์šฐ๋ฆฌ๋Š” strs์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•˜๊ณ  ์žˆ๋‹ค.

    ๋‹ค๋ฅธ ์š”์†Œ๋“ค์˜ ๊ธธ์ด๊ฐ€ strs[0]๋ณด๋‹ค ์งง์€ ๊ฒฝ์šฐ, ArgumentOutOfRangeException์ด ๋ฐœ์ƒํ•œ๋‹ค.

    ๋”ฐ๋ผ์„œ letter๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์ „์— ๋น„๊ตํ•  ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ i์™€ ๊ฐ™์€์ง€ ํ™•์ธ์„ ๋จผ์ € ํ•ด์ค˜์•ผํ•œ๋‹ค.

    || (or) ์—ฐ์‚ฐ์ž์˜ ๊ฒฝ์šฐ ์™ผ์ชฝ ๊ฐ’์ด True์ผ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ์ฒดํฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์™ผ์ชฝ์— strs[j].Length == i๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

     

    ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€์˜ if ๋ฌธ์—์„œ ๊ฐ€์žฅ ์งง์€ ๊ธธ์ด์˜ ๋‹จ์–ด์˜ letter ๊ฐฏ์ˆ˜๋งŒํผ ํ™•์ธ์ด ๋๋‚ฌ๊ฑฐ๋‚˜, ํ˜น์€ ๊ฐ™์€ index ๊ฐ’์˜ letter ๊ฐ’๋“ค์ด ๋‹ค๋ฅธ ๊ฒƒ์ด ํ™•์ธ๋Œ ๊ฒฝ์šฐ strs[0]์˜ 0๋ถ€ํ„ฐ i๊นŒ์ง€์˜ ๊ฐ’์„ Substring์„ ์ด์šฉํ•ด return ํ•œ๋‹ค.

    ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ์•„๋ฌด๋Ÿฐ ๊ฐ’์ด return ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, strs array์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๊ฐ€์žฅ ์งง์€ ๋‹จ์–ด์ธ ๊ฒƒ์ด๊ณ , ๊ทธ ์™ธ์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์ด ์ฒซ๋ฒˆ์งธ ๋‹จ์–ด๋ฅผ ์ ‘๋‘์‚ฌ๋กœ์„œ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ return ํ•˜๋ฉด ๋œ๋‹ค.

     

    LeetCode - 14. Longest Common Prefix

    'Problem solving > Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [LeetCode] 21. Merge Two Sorted Lists (C#)  (0) 2021.01.29
    [LeetCode] 20. Valid Parentheses (C#)  (0) 2021.01.26
    [LeetCode] 13. Roman to Integer (C#)  (0) 2021.01.24
    [LeetCode] 9. Palindrome Number (C#)  (0) 2021.01.23
    [LeetCode] 7. Reverse Integer (C#)  (0) 2021.01.23