1 minute read


sport

kakao 2021

카드 짝 맞추기

hint

이미 있던 카드는 움직이지 않으므로, 맵 전체가 아니라 남은 카드의 각 위치를 상태로 사용할 수 있다. 그런데 dp를 적용하려면 어떻게 해야 할까? 또한, 현재 위치에 대한 정보도 필요하다.

남은 카드들의 상태는 좌표쌍의 집합이다. 좌표쌍의 집합 -> 다차원 인덱스로 매핑할 방법이 필요하다. dp[ s ] = f(s) = 상태 s로부터 시작하여 남은 최소 횟수 s = (2, 2), [{1, 2}, {3, 0}]

또 큰 문제가 있다. ctrl을 구현해야 하는데, 어떻게 구현해야할 지 모르겠다. 너무 노가다스러운데. 게다가 카드에 걸리는 것도 구현해야 하는데, 집합을 써서 기록하면 다른 아이템 확인이 안 된다.

결국 그러면 현재 맵의 상태는 저장하되, 백트래킹으로 구현해야 하나? 백트래킹과 dp가 같이 사용될 수 있나?

kakao 2020

문자열 압축

분명 잘 구현한 것 같은데 특정 케이스들을 틀려서 한참을 고민하다 찾아보니 다음 글에 해당하는 실수였다.

https://seoftware.tistory.com/115

뭐하러 굳이 다른 블로그들에서 진짜로 배열 쪼개고 만들고 하나 했는데 이래서 필요한 듯 싶다.

그렇지만 수정해서 원래 하려던 방법으로 결국 성공했다.

py solution

def solution(s):
    slen = len(s)
    best = slen
    for curb in range(1, slen + 1):
        saved = 0
        lastpat = ''
        curp = 0
        occ = 0
        while(curp + curb <= slen):
            pat = s[curp : curp + curb]
            if(pat == lastpat):
                saved += curb
                occ += 1
            else:
                lastpat = pat
                if(occ > 1):
                    saved -= len(str(occ))
                occ = 1
            curp += curb
            
        if(occ > 1):
            saved -= len(str(occ))
        res = slen - saved
        if(res < best):
            best = res
    return best

Comments