
๐ 1. ๋ฌธ์ ์ค๋ช
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 "".
Note: All given inputs are in lowercase letters a-z.
a-z์ ์๋ฌธ์ ์ํ๋ฒณ์ผ๋ก ๋จ์ด๋ค๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ด ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ๋ฌธ์์ด์ ๊ณตํต๋๋ ๊ฐ์ฅ ๊ธด ์ ๋์ฌ๋ฅผ ๋ฆฌํดํ๋ผ.
์ ๋์ฌ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋น ๋ฌธ์์ด์ ๋ฆฌํดํ๋ผ.
Example 1
Input: ["flower","flow","flight"]
Output: "fl"
Example 2
Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
๐ก 2. ํ์ด๊ณผ์
ํ๋ก๊ทธ๋๋จธ์ค๋ ๋ฐฑ์ค๋ง ์๊ณ ์์๋๋ฐ ์ด์ brobro332๋ ๋ธ๋ก๊ทธ ์์ ๋ณด๊ณ ์๊ฒ ๋ ์ฝํ
์ฌ์ดํธ LeetCode
์ ๊ทผ ๋ฐฉ์
- ์์ ๋ฐฐ์ด 0๋ฒ ์ธ๋ฑ์ค์ ๋ด๊ธด ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ prefix๋ก ์ค์ ํ๋ค.
- ๋ค๋ฅธ ๋ฌธ์์ด๋ค๊ณผ ๋น๊ตํ๋ฉฐ prefix๋ฅผ ์ค์ฌ๊ฐ๋ค.
- strs[i].indexOf(prefix) != 0 ์ ๊ฒฐ๊ณผ๊ฐ true ์ธ๊ฐ? ( prefix๊ฐ ํ์ฌ ๋จ์ด์ ์ ๋์ฌ๊ฐ ์๋๋ผ๋ฉด)
- while ๋ฌธ์ด ์คํ๋์ prefix๊ฐ ํ ๊ธ์์ฉ ์ค์ด๋ ๋ค.
์ต์ข
์ ์ผ๋ก ๋จ์ prefix๊ฐ ๊ณตํต ์ ๋์ฌ์ด๋ค.
๐ 2-1. indexOf(String s) ๋ฉ์๋๋?
์ด ๋ฌธ์ ๋ indexOf(String s) ๋ฉ์๋๋ก ์ฝ๊ฒ ํ ์ ์๋ค.
indexOf(String s)๋ ๋ฌธ์์ด s๊ฐ ํ์ฌ ๋ฌธ์์ด์ ์ด๋์์ ์์ํ๋์ง ์ฐพ๋ ๋ฉ์๋์ด๋ค.
๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๋ถ๋ถ๋ฌธ์์ด์ ๋ฐํํ๋ ๋ฉ์๋์ด๋ค.
๋ง์ฝ s๊ฐ ํ์ฌ ๋ฌธ์์ด์ ์์ ๋ถ๋ถ(์ ๋์ฌ) ์ ์๋ค๋ฉด 0์ ๋ฐํํ๋ค.
์๋ค๋ฉด -1์ ๋ฐํํ๊ฑฐ๋, ์กด์ฌํ๋ ์์น์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
System.out.println("flow".indexOf("fl")); // 0 (๋งจ์์์ ์์ํจ)
System.out.println("flow".indexOf("ow")); // 2 ("ow"๋ 2๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์์)
โ๏ธ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ฐฐ์ด์ String[] strs = {"flower", "flow", "flight"}; ์ด๋ค.
์ด๊ธฐ์ค์ 0๋ฒ ์ธ๋ฑ์ค์ ๋ด๊ธด flower์ด prefix๊ฐ ๋๋ค. ์ฆ, String prefix = "flower"; ์ด๋ค.
โ๏ธ ๊ทธ ํ, ๋ ๋ฒ์งธ ์์์ธ flow์ prefix์ธ flower๋ฅผ ๋น๊ตํ๋ค.
"flow".indexOf("flower"); // -1 ("flower"๋ "flow" ์์ ์์)
- "flower"๋ "flow" ์์ ์์ผ๋ฏ๋ก -1 ๋ฐํ
- indexOf(prefix) != 0์ -1 != 0์ด๋ฏ๋ก true
- ์ฆ, "flower"๋ "flow"์ ์ ๋์ฌ๊ฐ ์๋๋ฏ๋ก while ๋ฃจํ ์คํ
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ
}
- "flower"์์ ํ ๊ธ์์ฉ ์ค์ด๋ฉด์ "flow"์ ์ ๋์ฌ๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ํ์ํ๋ค.
- "flower" โ "flowe" โ "flow"
โ๏ธ ๋ง์ง๋ง์ผ๋ก ์ธ ๋ฒ์งธ ์์์ธ flight์ ๋น๊ตํ๋ค.
"flight".indexOf("flow") // -1 ("flow"๋ "flight" ์์ ์์)
- "flow"๋ผ๋ ๋ฌธ์์ด์ด "flight" ์์์ ์์๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์
- "flight" ์์ "flow"๋ผ๋ ๋ถ๋ถ ๋ฌธ์์ด์ด ์์ผ๋ฏ๋ก -1์ ๋ฐํํ๋ค.
- indexOf(prefix) != 0์ -1 != 0์ด๋ฏ๋ก true๋ผ์ while๋ฌธ์ด ๋์๊ฐ๋ค.
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ
}
์ด์ prefix๊ฐ "flow"์ธ ์ํ์์ ์ while ๋ฌธ์ด ์คํ๋๋ค.
prefix๋ฅผ ํ๋์ฉ ์ค์ฌ๊ฐ๋ฉด์ "flight"์ ์ ๋์ฌ๊ฐ ๋๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค.
// prefix = "flow"
"flight".indexOf("flow") == -1 // "flight" ์์ "flow"๊ฐ ์์ผ๋ฏ๋ก -1 โ while ์คํ
prefix = "flo";
// prefix = "flo"
"flight".indexOf("flo") == -1 // "flo"๊ฐ ์์ผ๋ฏ๋ก -1 โ while ์คํ
prefix = "fl";
// prefix = "fl"
"flight".indexOf("fl") == 0 // "fl"์ด "flight"์ ์ ๋์ฌ์ด๋ฏ๋ก 0 โ while ์ข
๋ฃ
"flow"์์ "fl"๋ก ์ค์ธ ํ์ "flight".indexOf("fl") == 0 (์ ๋์ฌ ๋ง์) โ ์ข
๋ฃํ๋ค.
"flower", "flow", "flight" ์ธ ๋จ์ด์ ๊ฐ์ฅ ๊ธด ๊ณตํต ์ ๋์ฌ๋ "fl" ์ด๋ค.
โญ 3. ์ ๋ต์ฝ๋
โ ํ๋ฆฐ์ฝ๋
์ฒ์ ์๋์์๋ ๊ณ์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋จ
prefix ๋ณ์๋ฅผ ์ ์ธํ๊ฒ ์๋๋ผ ๋ณ์๋ช ์ first๋ก ํด ๋๊ณ ์๋์์๋ prefix๋ก ์๋ชป ์ฌ์ฉํด์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๊ทธ๋์ String prefix = strs[0];๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ค ๋์ฒ๋ผ ์ฝ๋๋ฅผ ์ง์ indexOf(prefix) != 0 ๋ก ํธ๋ ๊ฒฝ์ฐ์๋ ์๊ฐ ํด ๋ณด๋๊น ๋ฐฐ์ด์ ์ ๋ ฌ ํ ํ์๊ฐ ์๋ค. ๐
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) return "";
Arrays.sort(strs); // ์ฌ์ ์ ์ ๋ ฌ
String first = strs[0];
for (int i = 1; i < strs.length; i++) { // ๋๋จธ์ง ๋ฌธ์์ด๋ค์ด๋ ๋น๊ต
while (strs[i].indexOf(prefix) != 0) { // prefix๊ฐ ์ ๋์ฌ๊ฐ ์๋ ๋
prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ
if (prefix.isEmpty()) return "";
}
}
return prefix;
}
}
์ ๋ต์ฝ๋
import java.util.Arrays;
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) return "";
String prefix = strs[0]; // ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ์ค์
for (int i = 1; i < strs.length; i++) { // ๋๋จธ์ง ๋ฌธ์์ด๋ค๊ณผ ๋น๊ต
while (strs[i].indexOf(prefix) != 0) { // prefix๊ฐ ์ ๋์ฌ๊ฐ ์๋ ๋
prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ
if (prefix.isEmpty()) return ""; // ์ ๋์ฌ๊ฐ ์์ผ๋ฉด ์ข
๋ฃ
}
}
return prefix;
}
}
๐๐ป ์ข์ ์ฝ๋
์ด์๋ ๋ธ๋ก๊ทธ์์ ๊ฐ์ ธ์จ ์ฝ๋ https://brobro332.tistory.com/entry/LeetCode-14-Longest-Common-Prefix-Easy-Java
ํ ๋ง๋๋ก, ๋ฐฐ์ด์ ๋จผ์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ ํ(์ค๋ฆ์ฐจ์ ์ ๋ ฌ), ์ฒซ ๋ฒ์งธ ๋จ์ด(first)์ ๋ง์ง๋ง ๋จ์ด(last)๋ง ๋น๊ตํด์ ๊ฐ์ฅ ๊ธด ๊ณตํต ์ ๋์ฌ(prefix)๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค. ์?
- ์ค๊ฐ์ ์๋ ๋จ์ด๋ค์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋จ์ด ์ฌ์ด์ ์๋ค.
- ๊ทธ๋์ ๊ณตํต ์ ๋์ฌ๋ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋จ์ด์ ์ ๋์ฌ๋ณด๋ค ์งง์ ์๋ฐ์ ์๋ค.
- ๋ฐ๋ผ์ ์ค๊ฐ ๋จ์ด๋ค์ ์คํตํด๋ ๋ฌธ์ ์๋ค.
import java.util.Arrays;
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) return "";
Arrays.sort(strs); // ์ ๋ ฌํ์ฌ ์ฌ์ ์์ผ๋ก ๋ฐฐ์น
StringBuilder answer = new StringBuilder();
String first = strs[0];
String last = strs[strs.length - 1];
for (int i = 0; i < first.length(); i++) {
if (i < last.length() && first.charAt(i) == last.charAt(i)) {
answer.append(first.charAt(i));
} else {
break;
}
}
return answer.toString();
}
}
Arrays.sort(strs)๋ก ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ๋ค.
String[] strs = {"flower", "flow", "flight"}; // ์ ๋ ฌ์
Arrays.sort(strs); // ์ ๋ ฌ ํ: {"flight", "flow", "flower"}
๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ์ค๋ ๋จ์ด๊ฐ first, ๊ฐ์ฅ ๋ง์ง๋ง ๋จ์ด๊ฐ last์ ์ ์ฅ๋๋ค.
String first = strs[0]; // first = "flight"
String last = strs[strs.length - 1]; // last = "flower"
i | first.charAt(i) | last.charAt(i) | ๋น๊ต(==) | ์คํ ํ i๊ฐ |
0 | 'f' | 'f' | โ ๊ฐ์ | i = 1 |
1 | 'l' | 'l' | โ ๊ฐ์ | i = 2 |
2 | 'i' | 'o' | โ ๋ค๋ฆ | ๋ฐ๋ณต๋ฌธ ์ข ๋ฃํจ |
๋ฃจํ๊ฐ ๋๋ ํ, i = 2 ์ด๋ฏ๋ก "flight"์ "flower"์ ๊ณตํต ์ ๋์ฌ(prefix) ๋ "fl" ์ด๋ค.
first.substring(0, i) // "fl"
'Algorithm > JAVAํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ต๋น๊ฐ ๊ตฌํ๊ธฐ (ํด์๋งต) (9) | 2025.03.06 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์์ ์ง๋ ๋ฌธ์ ํ์ด (21) | 2025.03.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์นด๋๋ญ์น (ํ) (6) | 2025.02.20 |
[๋ฐฑ์ค] (Java) ์์ธํธ์ค ๋ฌธ์ (ํ) (7) | 2025.02.20 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์์๋์งํ (ํธ๋ฆฌ) (13) | 2025.02.20 |

๐ 1. ๋ฌธ์ ์ค๋ช
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 "".
Note: All given inputs are in lowercase letters a-z.
a-z์ ์๋ฌธ์ ์ํ๋ฒณ์ผ๋ก ๋จ์ด๋ค๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ด ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ๋ฌธ์์ด์ ๊ณตํต๋๋ ๊ฐ์ฅ ๊ธด ์ ๋์ฌ๋ฅผ ๋ฆฌํดํ๋ผ.
์ ๋์ฌ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋น ๋ฌธ์์ด์ ๋ฆฌํดํ๋ผ.
Example 1
Input: ["flower","flow","flight"]
Output: "fl"
Example 2
Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
๐ก 2. ํ์ด๊ณผ์
ํ๋ก๊ทธ๋๋จธ์ค๋ ๋ฐฑ์ค๋ง ์๊ณ ์์๋๋ฐ ์ด์ brobro332๋ ๋ธ๋ก๊ทธ ์์ ๋ณด๊ณ ์๊ฒ ๋ ์ฝํ
์ฌ์ดํธ LeetCode
์ ๊ทผ ๋ฐฉ์
- ์์ ๋ฐฐ์ด 0๋ฒ ์ธ๋ฑ์ค์ ๋ด๊ธด ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ prefix๋ก ์ค์ ํ๋ค.
- ๋ค๋ฅธ ๋ฌธ์์ด๋ค๊ณผ ๋น๊ตํ๋ฉฐ prefix๋ฅผ ์ค์ฌ๊ฐ๋ค.
- strs[i].indexOf(prefix) != 0 ์ ๊ฒฐ๊ณผ๊ฐ true ์ธ๊ฐ? ( prefix๊ฐ ํ์ฌ ๋จ์ด์ ์ ๋์ฌ๊ฐ ์๋๋ผ๋ฉด)
- while ๋ฌธ์ด ์คํ๋์ prefix๊ฐ ํ ๊ธ์์ฉ ์ค์ด๋ ๋ค.
์ต์ข
์ ์ผ๋ก ๋จ์ prefix๊ฐ ๊ณตํต ์ ๋์ฌ์ด๋ค.
๐ 2-1. indexOf(String s) ๋ฉ์๋๋?
์ด ๋ฌธ์ ๋ indexOf(String s) ๋ฉ์๋๋ก ์ฝ๊ฒ ํ ์ ์๋ค.
indexOf(String s)๋ ๋ฌธ์์ด s๊ฐ ํ์ฌ ๋ฌธ์์ด์ ์ด๋์์ ์์ํ๋์ง ์ฐพ๋ ๋ฉ์๋์ด๋ค.
๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๋ถ๋ถ๋ฌธ์์ด์ ๋ฐํํ๋ ๋ฉ์๋์ด๋ค.
๋ง์ฝ s๊ฐ ํ์ฌ ๋ฌธ์์ด์ ์์ ๋ถ๋ถ(์ ๋์ฌ) ์ ์๋ค๋ฉด 0์ ๋ฐํํ๋ค.
์๋ค๋ฉด -1์ ๋ฐํํ๊ฑฐ๋, ์กด์ฌํ๋ ์์น์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
System.out.println("flow".indexOf("fl")); // 0 (๋งจ์์์ ์์ํจ) System.out.println("flow".indexOf("ow")); // 2 ("ow"๋ 2๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์์)
โ๏ธ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ฐฐ์ด์ String[] strs = {"flower", "flow", "flight"}; ์ด๋ค.
์ด๊ธฐ์ค์ 0๋ฒ ์ธ๋ฑ์ค์ ๋ด๊ธด flower์ด prefix๊ฐ ๋๋ค. ์ฆ, String prefix = "flower"; ์ด๋ค.
โ๏ธ ๊ทธ ํ, ๋ ๋ฒ์งธ ์์์ธ flow์ prefix์ธ flower๋ฅผ ๋น๊ตํ๋ค.
"flow".indexOf("flower"); // -1 ("flower"๋ "flow" ์์ ์์)
- "flower"๋ "flow" ์์ ์์ผ๋ฏ๋ก -1 ๋ฐํ
- indexOf(prefix) != 0์ -1 != 0์ด๋ฏ๋ก true
- ์ฆ, "flower"๋ "flow"์ ์ ๋์ฌ๊ฐ ์๋๋ฏ๋ก while ๋ฃจํ ์คํ
while (strs[i].indexOf(prefix) != 0) { prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ }
- "flower"์์ ํ ๊ธ์์ฉ ์ค์ด๋ฉด์ "flow"์ ์ ๋์ฌ๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํด์ ํ์ํ๋ค.
- "flower" โ "flowe" โ "flow"
โ๏ธ ๋ง์ง๋ง์ผ๋ก ์ธ ๋ฒ์งธ ์์์ธ flight์ ๋น๊ตํ๋ค.
"flight".indexOf("flow") // -1 ("flow"๋ "flight" ์์ ์์)
- "flow"๋ผ๋ ๋ฌธ์์ด์ด "flight" ์์์ ์์๋๋ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์
- "flight" ์์ "flow"๋ผ๋ ๋ถ๋ถ ๋ฌธ์์ด์ด ์์ผ๋ฏ๋ก -1์ ๋ฐํํ๋ค.
- indexOf(prefix) != 0์ -1 != 0์ด๋ฏ๋ก true๋ผ์ while๋ฌธ์ด ๋์๊ฐ๋ค.
while (strs[i].indexOf(prefix) != 0) { prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ }
์ด์ prefix๊ฐ "flow"์ธ ์ํ์์ ์ while ๋ฌธ์ด ์คํ๋๋ค.
prefix๋ฅผ ํ๋์ฉ ์ค์ฌ๊ฐ๋ฉด์ "flight"์ ์ ๋์ฌ๊ฐ ๋๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ค.
// prefix = "flow" "flight".indexOf("flow") == -1 // "flight" ์์ "flow"๊ฐ ์์ผ๋ฏ๋ก -1 โ while ์คํ prefix = "flo"; // prefix = "flo" "flight".indexOf("flo") == -1 // "flo"๊ฐ ์์ผ๋ฏ๋ก -1 โ while ์คํ prefix = "fl"; // prefix = "fl" "flight".indexOf("fl") == 0 // "fl"์ด "flight"์ ์ ๋์ฌ์ด๋ฏ๋ก 0 โ while ์ข
๋ฃ
"flow"์์ "fl"๋ก ์ค์ธ ํ์ "flight".indexOf("fl") == 0 (์ ๋์ฌ ๋ง์) โ ์ข
๋ฃํ๋ค.
"flower", "flow", "flight" ์ธ ๋จ์ด์ ๊ฐ์ฅ ๊ธด ๊ณตํต ์ ๋์ฌ๋ "fl" ์ด๋ค.
โญ 3. ์ ๋ต์ฝ๋
โ ํ๋ฆฐ์ฝ๋
์ฒ์ ์๋์์๋ ๊ณ์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋จ
prefix ๋ณ์๋ฅผ ์ ์ธํ๊ฒ ์๋๋ผ ๋ณ์๋ช ์ first๋ก ํด ๋๊ณ ์๋์์๋ prefix๋ก ์๋ชป ์ฌ์ฉํด์ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ๊ทธ๋์ String prefix = strs[0];๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ค ๋์ฒ๋ผ ์ฝ๋๋ฅผ ์ง์ indexOf(prefix) != 0 ๋ก ํธ๋ ๊ฒฝ์ฐ์๋ ์๊ฐ ํด ๋ณด๋๊น ๋ฐฐ์ด์ ์ ๋ ฌ ํ ํ์๊ฐ ์๋ค. ๐
class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) return ""; Arrays.sort(strs); // ์ฌ์ ์ ์ ๋ ฌ String first = strs[0]; for (int i = 1; i < strs.length; i++) { // ๋๋จธ์ง ๋ฌธ์์ด๋ค์ด๋ ๋น๊ต while (strs[i].indexOf(prefix) != 0) { // prefix๊ฐ ์ ๋์ฌ๊ฐ ์๋ ๋ prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ if (prefix.isEmpty()) return ""; } } return prefix; } }
์ ๋ต์ฝ๋
import java.util.Arrays; class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) return ""; String prefix = strs[0]; // ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ๊ธฐ์ค์ผ๋ก ์ค์ for (int i = 1; i < strs.length; i++) { // ๋๋จธ์ง ๋ฌธ์์ด๋ค๊ณผ ๋น๊ต while (strs[i].indexOf(prefix) != 0) { // prefix๊ฐ ์ ๋์ฌ๊ฐ ์๋ ๋ prefix = prefix.substring(0, prefix.length() - 1); // ํ ๊ธ์์ฉ ์ค์ด๊ธฐ if (prefix.isEmpty()) return ""; // ์ ๋์ฌ๊ฐ ์์ผ๋ฉด ์ข
๋ฃ } } return prefix; } }
๐๐ป ์ข์ ์ฝ๋
์ด์๋ ๋ธ๋ก๊ทธ์์ ๊ฐ์ ธ์จ ์ฝ๋ https://brobro332.tistory.com/entry/LeetCode-14-Longest-Common-Prefix-Easy-Java
ํ ๋ง๋๋ก, ๋ฐฐ์ด์ ๋จผ์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ ํ(์ค๋ฆ์ฐจ์ ์ ๋ ฌ), ์ฒซ ๋ฒ์งธ ๋จ์ด(first)์ ๋ง์ง๋ง ๋จ์ด(last)๋ง ๋น๊ตํด์ ๊ฐ์ฅ ๊ธด ๊ณตํต ์ ๋์ฌ(prefix)๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค. ์?
- ์ค๊ฐ์ ์๋ ๋จ์ด๋ค์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋จ์ด ์ฌ์ด์ ์๋ค.
- ๊ทธ๋์ ๊ณตํต ์ ๋์ฌ๋ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋จ์ด์ ์ ๋์ฌ๋ณด๋ค ์งง์ ์๋ฐ์ ์๋ค.
- ๋ฐ๋ผ์ ์ค๊ฐ ๋จ์ด๋ค์ ์คํตํด๋ ๋ฌธ์ ์๋ค.
import java.util.Arrays; class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) return ""; Arrays.sort(strs); // ์ ๋ ฌํ์ฌ ์ฌ์ ์์ผ๋ก ๋ฐฐ์น StringBuilder answer = new StringBuilder(); String first = strs[0]; String last = strs[strs.length - 1]; for (int i = 0; i < first.length(); i++) { if (i < last.length() && first.charAt(i) == last.charAt(i)) { answer.append(first.charAt(i)); } else { break; } } return answer.toString(); } }
Arrays.sort(strs)๋ก ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ๋ค.
String[] strs = {"flower", "flow", "flight"}; // ์ ๋ ฌ์ Arrays.sort(strs); // ์ ๋ ฌ ํ: {"flight", "flow", "flower"}
๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ์ค๋ ๋จ์ด๊ฐ first, ๊ฐ์ฅ ๋ง์ง๋ง ๋จ์ด๊ฐ last์ ์ ์ฅ๋๋ค.
String first = strs[0]; // first = "flight" String last = strs[strs.length - 1]; // last = "flower"
i | first.charAt(i) | last.charAt(i) | ๋น๊ต(==) | ์คํ ํ i๊ฐ |
0 | 'f' | 'f' | โ ๊ฐ์ | i = 1 |
1 | 'l' | 'l' | โ ๊ฐ์ | i = 2 |
2 | 'i' | 'o' | โ ๋ค๋ฆ | ๋ฐ๋ณต๋ฌธ ์ข ๋ฃํจ |
๋ฃจํ๊ฐ ๋๋ ํ, i = 2 ์ด๋ฏ๋ก "flight"์ "flower"์ ๊ณตํต ์ ๋์ฌ(prefix) ๋ "fl" ์ด๋ค.
first.substring(0, i) // "fl"
'Algorithm > JAVAํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์ต๋น๊ฐ ๊ตฌํ๊ธฐ (ํด์๋งต) (9) | 2025.03.06 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์์ ์ง๋ ๋ฌธ์ ํ์ด (21) | 2025.03.05 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์นด๋๋ญ์น (ํ) (6) | 2025.02.20 |
[๋ฐฑ์ค] (Java) ์์ธํธ์ค ๋ฌธ์ (ํ) (7) | 2025.02.20 |
[ํ๋ก๊ทธ๋๋จธ์ค] (Java) ์์๋์งํ (ํธ๋ฆฌ) (13) | 2025.02.20 |