Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
Tags
- Unreal
- 언리얼
- A* Algorithm
- 언리얼 엔진5 #언리얼 클라이언트 프로그래밍
- C++
- CS
- Console
- leetcode
- 툰쉐이딩
- 헤더 경로
- Toon Shading
- Harvard
- 브론즈
- 네트워크 기초
- CS50
- c++ 베이직
- 오늘밤 세계에서 이 사랑이 사라진다 해도 #독후감 #오열
- 원카페#무인카페#카페추천#카페맛집
- 백준
- 메테리얼
- build.cs
- STL
- topdownmove
- 폭설 #미친 날씨
- 순환 리스트
- 코드리뷰
- Module
- 언리얼엔진5 #언리얼 클라이언트 프로그래밍
- UE_5
- Gas
Archives
- Today
- Total
WN_인생기록
LeetCode - 14.Longest Common Prefix 본문
가장 긴 접두사 찾는 문제이다.
처음엔 한글자씩 뽑아서 일치하면 넘어가고 그런식으로 풀어나가려고 했는데, 한글자씩 뽑는건 되는데 체크하고 다음거 넘어가고, 틀리면 구문 탈출하는 과정이 복잡한거 같아서 생각을 바꿨다.
아예 첫 글자를 기준으로 삼고, 뒤에서부터 하나씩 잘라가면서 비교하는게 나을거 같았다.
왜냐하면 앞에서부터 글자를 비교하면 글자 length를 고려해야해서 복잡할거 같았다.
class Solution
{
public:
string longestCommonPrefix(vector<string>& strs)
{
if (strs.empty()) return "";
// 첫번째 단어를 기준으로 선택
string prefix = strs[0];
// 첫 번째 문자열을 제외하고 나머지 문자열을 순회
for (int i = 1; i < strs.size(); i++)
{
// prefix의 단어와 일치하면 구문 탈출
while (strs[i].find(prefix) != 0)
{
// 뒷부분에서부터 한개씩 자르기
prefix = prefix.substr(0, prefix.length() - 1);
// 첫번째 단어 다 지워졌을때 바로 탈출
if (prefix.empty()) return "";
}
}
return prefix;
}
};
그래서 뒷부분 부터 잘라가면서 모든 문자열에 공통적인 접두사를 찾는게 좋다고 생각해서 이런식으로 풀어봤다.
가장 빠른건 2차원 배열로, 각 문자열의 단어 하나하나를 순환하면서, 동일한 위치에 같은 문자가 있는지 확인하고, 없으면 바로 루프를 중단하고 지금까지의 문자열을 반환하는 코드였다.
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string rez = "";
int ct = 0;
int i = 1;
for(int j = 0; j < strs[0].size(); j++)
{
for(int i = 1; i < strs.size();i++)
if(strs[0][j] == strs[i][j])
{
ct++;
}
if(ct == strs.size()-1)
{
rez += strs[0][j];
ct = 0;
}
else
break;
}
return rez;
}
};
내가 생각하기에 가장 복잡할거 같은 코드가 제일 빠른 코드였다 ㅎㅎ;;;
다음엔 생각해본건 꼭 구현해보고 다른 방식으로 도전해 봐야겠다 ㅠ
'LeetCode > Easy' 카테고리의 다른 글
LeetCode - 13 Roman to Integer (0) | 2024.03.27 |
---|---|
LeetCode - 9. Palindrome Number (0) | 2024.03.27 |