공부하기싫어
article thumbnail

오늘 강의 목차

오늘은 리눅스 fs 에 대해서 배우나보다

그런가보다~

 

 

 

 

저번주 금요일에 스터디에서 얘기됬던 문제를 풀어봤는데

일요일에 한 5시간 정도 투자하고

오늘 강의 시작한 10시부터 지금 오후 3시까지 6시간을 썻는데

 

ㅅㅂ 계속 2씩 값이 오차가 난다

머리아파서 그만할래 ㅈ같네

https://leetcode.com/problems/longest-palindrome-by-concatenating-two-letter-words/

 

Longest Palindrome by Concatenating Two Letter Words - 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

이 문제인데

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
'''
2개 알파벳 한쌍으로 이루어진 리스트들 중 대칭이 만들어질 수 있는 문자열 길이 리턴
 
1. 같은 문자인지 확인
    if 그 문자 count(n) > 2 : cnt+=4n / 해당 문자 제거 / 재귀
    elif count(n)==1 : 해당 문자 제거 / 체크=true
    else : 아님말구
2. 대칭이 있는지 확인
    if : 있다
        해당 문자 + 리버스 문자 제거 / 재귀
    else : 없음말구
3. 없으면 return 0
'''
 
 
class Solution(object):
    def longestPalindrome(self, words):
        _lenth,_check,_num,_newlist=self.samelatter(0False0, words,)
        result=self.difflatter(_lenth,_newlist)
        print(result,_lenth,_check,_num,_newlist)
        if _num>=2 :
            result+=2
        else :
            if _check :
                result+=2
        return result
        
 
    #gg, aa 같은게 몇개 있는지 파악해서 그 총 길이, 중복제거된 리스트를 리턴
    def samelatter(self,lnt,s,num,li) :
        print('sl()',lnt,s,num,li)
        sl_nl=[]
        if len(li)==0 :
            return lnt,s,num,sl_nl
        for i in li :
            if i[0]==i[1] :
                n=li.count(i)
                if n>=2 :
                    sl_nl=[j for j in li if j not in i]
                    if n%2==0 :
                        lnt+=n*2
                    else :
                        lnt+=(n-1)*2
                    num+=1
                    return self.samelatter(lnt,False,num,sl_nl)
                else :
                    li.remove(i)
                    sl_nl=li
                    s=True
                    return self.samelatter(lnt,s,num,sl_nl)
        else :
            sl_nl=li
        return lnt,s,num,sl_nl
 
 
    def difflatter(self,lnt,li) :
        print('dl()',lnt,li)
        for k in li :
            sw=k[1]+k[0]
            n=li.count(sw)
            if n :
                li.remove(sw)
                li.remove(k)
                lnt+=4
                return self.difflatter(lnt,li)
        return lnt
 
words = ["mt","lt","tt","lt","tm","lm","ml","mt","tl","mm","lt","tt","mt","ml","tt","tl","tl","mm","tm","ll","ml","lt","ll","ml","tl","ll","tt","tl","lm","ll","mt","tl","tt","lt","tm","tm","mt","tl","lm","tt","lt","lt","ml","lt","tl","mm","lt","ll","ll","tm","lm","tm","mt","tm","tt","tl","ml","tt","ml","mt","tm","tm","mt","mm"]
init_c=Solution()
print(init_c.longestPalindrome(words))
cs

이렇게 짜봤는데

계속 값이 틀리게 나온다 ㅋㅋ

결과값에서 딱 2씩 차이나는데

이게 문자가 같은 인덱스를 계산하는 과정에서

명확하지 못해서

게속 오류가 나는거 같다

 

시간 오래 썻고 머리도 오래썻으니까

그냥 다른사람 코드를 봤는데

 

입력값을 Counter 모듈을 사용해서 딕셔너리로 가공하고

가공된 숫자만을 이용해서 길이를 구해버림 ㄷㄷ

 

그리고 이제 구름에서 직접 제공하는

'알고리즘 먼데이' 채널에 초대되서

오늘 올라온 14주차 문제를 풀기로 했다

문제는 비공개여서 블로그에 포스팅 하지 못한다

 

14주차 문제는 총 3문제인데

첫번재 문제 읽고 이해하는데만 20분남짓걸렸음 ㅋㅋ;

 

날잡고 풀어야할듯 ㄹㅇㅋㅋ