알고리즘 공부 3일차

김서영·2023년 12월 14일
0

알고리즘

목록 보기
3/25

1. 프로그래머스 - 문자열 나누기

def solution(s):
    answer = 0 # 결과값
    word = s # 잘라낼 s값 저장
    a = 1 # 시작하는 문자 횟수
    b = 0 # 시작하는 문자와 다른 문자 횟수
    i = 1 # 인덱스 번호
    while True:
        if len(word) == 0:
            break
        if len(word) == i:
            answer += 1
            break
        if word[0] == word[i]:
            a += 1
            i += 1
        else:
            b += 1
            i += 1
        if a == b:
            answer += 1
            word = word[i:]
            i = 1
            a = 1
            b = 0
    return answer

2. 프로그래머스 - 체육복

def solution(n, lost, reserve):
    # 정렬
    lost.sort()
    reserve.sort()
	
    # lost, reserve에 공통으로 있는 요소 제거
    for i in reserve[:]:
        if i in lost:
            reserve.remove(i)
            lost.remove(i)
	
    # 체육복 빌려주기(나의 앞 번호부터 확인)
    for i in reserve:
        if i-1 in lost:
            lost.remove(i-1)
        elif i+1 in lost:
            lost.remove(i+1)
    
    return n-len(lost)

얕은 복사와 remove

반복문을 돌리면서 remove로 인수를 제거하려면 얕은복사를 활용하면 된다!!

for i in reserve[:]:
        if i in lost:
            reserve.remove(i)
            lost.remove(i)

3. 프로그래머스 - 숫자 짝꿍

- 풀이 1

def solution(X, Y):
    answer = ''
    lst = []
    lst_Y = list(Y)
    for i in X:
        if i in lst_Y:
            lst.append(int(i))
            lst_Y.remove(i)
    if len(lst) == 0:
        return "-1"
    elif sum(lst) == 0:
        return "0"
    else:
        lst.sort(reverse=True)
        for i in lst:
            answer += str(i)
        return answer

처음에는 이런 방식으로 풀었었는데 몇가지 테스트 케이스에서 시간 초과가 발생했다..!!
그래서 알아보니 Counter 함수를 활용해보면 좋을 것 같아서 Counter를 활용해보았다!

- 풀이 2

from collections import Counter

def solution(X, Y):
    nums = Counter(X) & Counter(Y)
    if not nums:
        return '-1'
    elif list(nums) == ['0']:
        return '0'
    nums_order = sorted(list(nums), reverse=True)
    answer = ''
    for num in nums_order:
        answer += num * nums[num]
    return answer

4. 프로그래머스 - 로또의 최고 순위와 최저 순위

from collections import Counter

def solution(lottos, win_nums):
    lottos_dict = {'0':6, '1':6, '2':5, '3':4, '4':3, '5':2, '6':1}
    answer = []
    nums = Counter(lottos) & Counter(win_nums)
    zero = lottos.count(0)
    return lottos_dict[str(len(nums)+zero)], lottos_dict[str(len(nums))]
profile
개발과 지식의 성장을 즐기는 개발자

0개의 댓글