⚡문제정보
생각나서 한번 재미로 풀어본 문제입니다.
이제... 프로그래머스에는 제가 풀 수 있는 문제가 없어서
리트코드로 공부한다음 프로그래머스 2레벨에 도전해보려구요
근데 이건 쉽게 풀 수 있음 당연함 easy임
🙄문제설명
영어 소문자,대문자로 구성된 문자열이 주어집니다.
그 문자열로 만들 수 있는 펠린드롬(앞뒤가똑같은문자)의 최대길이를 리턴하세요
🔍접근방법
회문이 되려면 짝수개의 같은 문자가 필요합니다.
하지만 회문의 정가운데 만큼은 1개의 문자도 존재할 수 있습니다.
따라서 map 자료구조를 이용해 각 문자의 등장횟수를 세어주고
map의 밸류값을 기반으로 짝수면 더해주고 홀수면 -1을 빼서 더해주면 될 것 같았습니다
만약 홀수면서 값이 1이라면 -1을 뺐을때 0이되니 아무일도 일어나지않고 그건 제가 원하는 일이니까요
그리고 배열에 홀수값이 존재한다면 그걸 체크해주고
마지막에 홀수값이 존재할땐 1을 더해주면 될 것 같습니다.
🔍나의 풀이
var longestPalindrome = function(s) {
let map = new Map()
let answer = 0
let arr = 0
for(i=0 ; i<s.length ; i++) {
map.set(s[i] , map.get(s[i])+1 || 0 +1 )
}
[...map.values()].forEach(ele => {
if(ele % 2 ==0) answer += ele
else {
answer += ele -1
arr += 1
}
})
if(arr != 0 ) answer += 1
return answer
};
var longestPalindrome = function(s) {
let map = new Map()
let answer = 0
let arr = 0
//각각 map , 답 , 홀수요소가 있는지 세어줄 변수입니다.
for(i=0 ; i<s.length ; i++) {
map.set(s[i] , map.get(s[i])+1 || 0 +1 )
}
// map에 등장횟수를 담아줍니다.
[...map.values()].forEach(ele => {
if(ele % 2 ==0) answer += ele
else {
answer += ele -1
arr += 1
}
})
//map의 밸류만 뽑아내서 forEach를 돌려줍니다.
//사실 그냥 forEach를 돌려도되긴할듯
if(arr != 0 ) answer += 1
//홀수 체크해주는 카운터가 0이 아니라면 1을 더해줍니다.
return answer
// 리턴
};
🔍다른사람의 좋은 풀이
var longestPalindrome = function(s) {
let ans = 0;
let keys = {};
for (let char of s) {
keys[char] = (keys[char] || 0) + 1;
if (keys[char] % 2 == 0) ans += 2;
}
return s.length > ans ? ans + 1 : ans;
};
for 문을 한번만 사용하고도 문제를 해결하는 풀이입니다.
발상이 대단한것같아요
keys가 짝수가 될때마다 2를 더해주면 되는거네요
마지막 리턴에 삼항연산자는 무슨 원리인지 몰...르겠음
반응형
'leetcode' 카테고리의 다른 글
3. Longest Substring Without Repeating Characters 자바스크립트 (0) | 2023.01.07 |
---|---|
442. Find All Duplicates in an Array 자바스크립트 (1) | 2023.01.07 |
66.plus One (0) | 2022.11.29 |
13. Roman to Integer (0) | 2022.11.28 |
500. Keyboard Row (0) | 2022.11.27 |