일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- [AI 5기] 연습 문제집
- 날씨 웹 만들기
- leetcode
- 코드스테이츠
- [파이썬 실습] 심화 문제
- [파이썬 실습] 중급 문제
- 엘리스
- 간단한 날씨 웹 만들기
- 자바스크립트 날씨
- 엘리스 AI 트랙 5기
- 자바스크립트 sort()
- 자바스크립트 split()
- 자바스크립트
- 부트캠프
- 프론트개발공부
- HTML
- 개발일기
- 리트코드
- 삼항연산자
- 개발공부
- 자바스크립트 날씨 웹 만들기
- 자바스크립트 reduce()
- RN 프로젝트
- reactnativecli
- 프로그래머스
- 엘리스 ai 트랙
- [파이썬 실습] 기초 문제
- 코딩부트캠프
- 프론트개발
- JavaScript
- Today
- Total
개발조각
[리트코드] 14. Longest Common Prefix 본문
안녕하세요. 개발조각입니다.😊
이번에는 문제가 easy인데 제가 꼬아서 생각해서 돌고 돌다가 푼 문제입니다.ㅠ
(내가 많이 꼬인성격이라 그런가...ㅎㅎ)
https://leetcode.com/problems/longest-common-prefix/
Longest Common Prefix - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
해결방안
var longestCommonPrefix = function(strs) {
let sortStrs = strs.sort((a,b)=> a.length - b.length);
let short = sortStrs.shift();
let answer = '';
for(let i=0; i<short.length; i++){
let str = short.slice(0, i+1);
let includesStr = sortStrs.filter(x => x.slice(0, i+1) === str);
if(includesStr.length === sortStrs.length){
if(answer.length < str.length) answer = str;
}
}
return answer;
};
이 문제는 단순히 첫문자부터 일치하는 문자가 어디인지 찾는 문제입니다.
Input: strs = ["flower","flow","flight"]
Output: "fl"
Input: ["reflower","flow","flight"]
Output: ""
이런 식으로 앞 문자부터 일치하는 부분을 찾으면 됩니다.
저는 이 문제가 같은부분 중에 가장 긴 문자열을 찾으라는 문제인 줄 알았습니다;;;
아래 예시를 토대로 설명하겠습니다.
Input: strs = ["flower","flow","flight"]
Output: "fl"
let sortStrs = strs.sort((a,b)=> a.length - b.length);
let short = sortStrs.shift();
먼저 sort를 사용해서 strs배열의 문자열길이가 짧은 순으로 정렬했습니다.
→ sortStrs = ['flow', 'flight', 'flower']이 됩니다.
맨 앞자리가 가장 문자열 길이가 짧은 문자열이니 그값을 따로 빼왔습니다.
short변수 기준으로 만들생각이니 해당 short에 해당하는 문자열은 필요가 없을 것 같아 shift()로 빼주었습니다.
→ short = 'flow'
→ sortStrs = ['flight', 'flower']이 됩니다.
let answer = '';
for(let i=0; i<short.length; i++){
let str = short.slice(0, i+1);
let includesStr = sortStrs.filter(x => x.slice(0, i+1) === str);
if(includesStr.length === sortStrs.length){
if(answer.length < str.length) answer = str;
}
}
return answer;
먼저 short의 길이만큼 반복문으로 돌려주었고
short가 flow라면 str은 f → fl → flo → flow 이런 식으로 반복이 될 겁니다.
여기서 sortStrs에 filter을 해주어 str과 같은지 비교를 해줍니다.
sortStrs의 원소가 f → fl → flo → flow이 있는지 확인하고
다 있을 경우 answer에 넣어주는 방식으로 풀었습니다.
'알고리즘🅰 > 리트코드' 카테고리의 다른 글
[리트코드] 16. 3Sum Closest (0) | 2022.09.19 |
---|---|
[리트코드] 15. 3Sum (0) | 2022.09.18 |
[리트코드] 13. Roman to Integer (0) | 2022.09.13 |
[리트코드] 12. Integer to Roman (0) | 2022.09.13 |
[리트코드] 10. Regular Expression Matching (0) | 2022.09.13 |