코딩테스트 공부

구현 문제 풀이

원준킹 2021. 1. 9. 19:39

문제 1. 럭키 스트레이트 (난이도 1, 풀이시간 5분/20분, 정답)

#4:45

N = input()
left_list = list(map(int,N[:(len(N)+1)//2]))
right_list = list(map(int,N[(len(N)+1)//2:]))
left_sum = sum(left_list)
right_sum = sum(right_list)
if left_sum == right_sum:
    print('LUCKY')
else:
    print('READY')

 

 

- 나눗셈(/) 연산 후엔 정수형이 아니라 실수형이라는 걸 명심해두길

 

문제 2. 문자열 재정렬 (난이도 1, 풀이시간 20분/20분, 정답)

#4:58

S = list(input())

num = 0
for x,y in enumerate(S):

    if ord('0')<= ord(y) <= ord('9'):
        num += int(y)

S = [x for x in S if not ord('0')<= ord(x) <= ord('9')]
S = sorted(S, key= lambda x: x[0])
res = ''
for i in S:
    res += i
res += str(num)
print(res)

 

- for문에서 pop하니까 특정 index가 씹히는 현상이 있음, 그냥 따로 숫자끼리 더하고 문자열 저장 리스트를 만드는게 편한 듯

- isalpha() : 알파벳 확인 함수 

- ''.join(list) : 리스트 문자열화

 

문제 3. 문자열 압축 (난이도 1.5, 풀이시간 1시간30분/30분, 풀이참고 정답)

 

#6:00
def solution(s):
    
    num = 1
    min = 1e9
    if len(s) == 1:
        return 1

    while num <= len(s)//2:
        i = 0

        res = []
        cnt = 1
        while num*(i+2) <= len(s):

            now = s[num*(i):num*(i+1)]
            next = s[num*(i+1):num*(i+2)]

            if now == next:
                cnt += 1
            elif cnt == 1:
                res.append(now)
                cnt = 1
            else:
                res.append(str(cnt))
                res.append(now)
                cnt = 1
            i += 1
        i -= 1

        if now == next:
            res.append(str(cnt))
            res.append(next)
        else:
            res.append(next)

        res.append(s[num*(i+2):])


        res_str = ''.join(res)
        if min > len(res_str):
            min = len(res_str)
            #print(res_str)

        num += 1

    return min

 

 

 

- 문제 자체를 제대로 이해 못 하던 중에 조건에 무조건 일정단위로 단어를 잘라야한다는 조건을 발견하고 풀이 가능

- 입력 길이가 1일 때 제대로 동작하지 않아서 따로 처리해줘야했음, 다음부터는 입력값의 범위 전체가 내가 생각한 코드에서 동작하는지 생각해볼 것 (1 따로 처리 전에는 2부터 동작 가능)

'코딩테스트 공부' 카테고리의 다른 글

그리디 문제 풀이  (0) 2021.01.06
최단 경로  (0) 2021.01.06
다이나믹 프로그래밍  (0) 2020.12.31
이진 탐색  (0) 2020.12.30
정렬  (0) 2020.12.29