๋ฌธ์
For two strings s and t, we say "t divides s" if and only if s = t + ... + t (i.e., t is concatenated with itself one or more times).
Given two strings str1 and str2, return the largest string x such that x divides both str1 and str2.
Example 1:
Input: str1 = "ABCABC", str2 = "ABC"
Output: "ABC"
Example 2:
Input: str1 = "ABABAB", str2 = "ABAB"
Output: "AB"
Example 3:
Input: str1 = "LEET", str2 = "CODE"
Output: ""
Constraints:
- 1 <= str1.length, str2.length <= 1000
- str1 and str2 consist of English uppercase letters.
์ ๊ทผ๋ฐฉ๋ฒ
๋ฐ๋ณต๋๋ ์คํธ๋ง์ ๊ตฌํ๋ ๋ฌธ์ ๋ ์ผ๋จ ๋ฐ์ผ๋ก ์ชผ๊ฐ์ ์์ํ๋ฉด ๋๋ค๋ผ๊ณ ์๊ฐ์ ํ๊ณ ์์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ๋ ๋ค๋ฅธ ์คํธ๋ง์ด ํ๋ ๋ ์ฃผ์ด์ง๊ณ ๊ทธ๊ฒ๊ณผ ๋น๊ตํ๋ ๋ฌธ์ ์ด๊ธฐ๋๋ฌธ์ ์ฒซ๋ฒ์งธ ๋๋ฒ์งธ ์ฃผ์ด์ง ์คํธ๋ง์ ๋ฐ๋ณต๋๋ ๋ฌธ์์ ์ผ๋ถ๋ผ๊ณ ์๊ฐํ๊ณ ๊ทธ ๊ฐ์ ๋๋ ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค. ๋๋ ์ ๋ฑ ๋จ์ด์ง๋ค๋ฉฐ ๋๋ฒ์งธ ์ฃผ์ด์ง ์คํธ๋ง ๊ธธ์ด๋งํผ ์ฒซ๋ฒ์งธ ๋ฐฐ์ด์ ๋ฝ์๋ด๋ฉด ๋๋ค๊ณ ์๊ฐํจ.
์ฒซ๋ฒ์งธ ์์๋ฅผ ๋ณด๊ณ ๊ทธ๋ ๊ฒ ์๊ฐ์ ํจ.
๋๋ฒ์งธ ์์๋ ๊ทธ๋ ๊ฒ ๋๋๋ฉด ๋๋จธ์ง๊ฐ 0์ด ์ ๋จ. ๊ทธ๋์ ๋๋ฒ์งธ ์คํธ๋ง์ ๋จ์ ์๋ก ๋ ๋๋๋ค๊ณ ์๊ฐํจ. ๊ทธ๋ฌ๊ณ 0 ๊ฐ์ด ๋๋ฉด ๊ทธ๋ ์ฃผ์ด์ง ๊ธธ์ด๊ฐ๋งํผ ์ฒซ๋ฒ์งธ ์ธ์์์ ๋ฝ์๋ด๋ฉด ๋๋ค๊ณ ์๊ฐํจ.
์ฝ๋
var gcdOfStrings = function(str1, str2) {
// ์ฃผ์ด์ง ํ๋ผ๋ฏธํฐ๊ฐ ๋๊ฐ์ง ์๋ค๋ฉด ๋ฐ๋ก ๋น ๋ฌธ์์ด ๋ฐํ
if( str1+str2 != str2+str1) return ""
// ์ฌ๊ท๋ฅผ ํ์ฉ
// ์ฃผ์ด์ง ํ๋ผ๋งํฐ๋ค์ ๊ธธ์ด๋ฅผ ๋๋ ์ ๋๋์ด 0์ด ๋๊ฒ๋
// ๊ทธ๋ฌ๋ฉด 0์ด ๋๊ฒ ๋ง๋ ๊ธธ์ด๋ฅผ ๋ฝ์์ ๊ทธ ๊ธธ์ด๊น์ง ์๋ผ์ฃผ๋ฉด
// ๋ฐ๋ณต๋๋ ์์์
function GCD(a, b) {
if (a % b === 0) return b
return GCD(b, a % b)
}
const length = GCD(str1.length, str2.length)
return str2.slice(0, length)
};
'๊ฐ๋ฐ > ๐ฌ ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[leetCode/Javascript] 2418. Sort the People (1) | 2024.02.11 |
---|---|
[LeetCode/Javascript] 216. Combination Sum III (0) | 2024.02.05 |
[leetCode] 151. Reverse Words in a String - Javascript (0) | 2024.02.02 |
[leetCode] 746. Min Cost Climbing Stairs - javascript (0) | 2024.01.31 |
[leetCode] 1207. Unique Number of Occurrences / javascript (0) | 2024.01.30 |