happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (300)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (53)
      • DevOps (3)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Patch
  • kubernetes
  • edit
  • replace
  • apply
  • 15
  • 18

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

알고리즘/알고리즘 문제

[python] 프로그래머스 > 연속된 부분 수열의 합

2023. 5. 29. 21:00

https://school.programmers.co.kr/learn/courses/30/lessons/178870

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이 - 완전 틀림

from collections import deque

def solution(sequence, k):
    temp = {}
    seqIndex = len(sequence) - 1
    while seqIndex > -1:
        temp[seqIndex] = sequence[seqIndex]
        valSum = sum(temp.values())
        if valSum == k:
            return [list(temp.keys())[-1], list(temp.keys())[0]]
        elif valSum > k:
            del(temp[list(temp.keys())[0]])
        seqIndex -= 1
  • 길이가 짧은 수열이 여러 개인 경우 앞쪽(시작 인덱스가 작은)에 나오는 수열을 찾습니다. <- 조건을 충족시키는 못하는 로직이다.

나의 풀이 - 시간초과

def solution(sequence, k):
    answer = []
    for i in range(len(sequence)):
        if sequence[i] == k:
            return [i, i];
        for j in range(len(sequence)):
            if sum(sequence[i:j]) == k:
                answer.append((i, j-1))
    result = sorted(answer, key = lambda x: (x[1]-x[0], x[0]))
    return result[0]
  • 이중포문으로 풀면 시간초과가 날 것 같았지만, 다른 방법이 떠오르지 않아서 구현해보았으나 역시 시간초과가 났다.

나의 풀이 - 다른 사람 풀이 참조

def solution(sequence, k):
    answer = []
    sum = 0
    left = 0
    right = -1
    while True:
        if sum < k:
            right += 1
            if right >= len(sequence):
                break
            sum += sequence[right]
        else:
            sum -= sequence[left]  
            left += 1
            if left >= len(sequence):
                break
        if sum == k:
            answer.append([left, right])
    result = sorted(answer, key = lambda x: (x[1]-x[0], x[0]))
    return result[0]
  • 결국 다른 사람의 풀이를 참조하였다.
  • left, right, sum 3개의 변수를 두고 풀 생각은 전혀 못했고, 풀이를 보고도 너무 헷갈렸다.

후기

  • 레벨2인데도 쉽지 않다...
저작자표시 비영리 (새창열림)

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[python] 프로그래머스 > 귤고르기  (0) 2023.05.30
[python] 프로그래머스 > 구명보트  (0) 2023.05.30
[python] 프로그래머스 > 마법의 엘리베이터  (0) 2023.05.25
[python] 프로그래머스 > H-index  (0) 2023.05.23
[python] 프로그래머스 > 이진변환반복하기  (0) 2023.05.18
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [python] 프로그래머스 > 귤고르기
    • [python] 프로그래머스 > 구명보트
    • [python] 프로그래머스 > 마법의 엘리베이터
    • [python] 프로그래머스 > H-index
    happyso
    happyso

    티스토리툴바