반응형

 

문제

문자열을 파라미터로 받으면 그 문자열 중간에 있는 글자를 가져와 return하면 됩니다.

만약 문자열이 짝수면 중간에 있는 2개의 글자를 return하면 됩니다.

 

코드

1. math import 해서 푸는 방법입니다.

import math
def solution(s):
    answer = ''
    i = int(len(s) / 2)
    if len(s) % 2 == 0:
        answer = s[i-1] + s[i]
    else:
        answer = s[i]
    return answer

 

2. 다른 분의 코드

def string_middle(str):
    a = len(str)
    if a % 2 == 0 :
        a = (a-2) / 2
    else :
        a = (a-1) / 2
    return str[int(a) : -int(a)]

 

3. 다른 분의 코드

def string_middle(str):
    return str[(len(str)-1)//2 : len(str)//2 + 1]
반응형
반응형
반응형

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

 

프로그래머스

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

programmers.co.kr

문제

멤버쉽을 통해서 구매할려는 품목을 할인 받을 수 있는 날짜를 구해서 return 해야하는 문제입니다.

 

코드

1. 테스트는 통과했지만 테스트 12 말고는 실패했습니다.

def solution(want, number, discount):
    answer = 0
    arr = [number[idx] * [i] for idx, i in enumerate(want)]
    arr = sum(arr, [])
    
    for i in range(len(discount) - len(arr)):
        idx = i
        try:
            tmp = discount[i: i + len(arr)]
            for j in range(len(arr)):
                if arr[j] not in tmp:
                    break
                else:
                    tmp.remove(arr[j])
            if not tmp:
                answer = i + 1
                break
        except:
            pass
        
    return answer

 

2. Counter 함수 사용.(다른분 코드)

from collections import Counter

def solution(want, number, discount):
    answer = 0
    dic = {}
    
    for i in range(len(want)):
        dic[want[i]] = number[i]
    
    for i in range(len(discount) -9):
        if dic == Counter(discount[i:i+10]):
            answer += 1
    
    return answer

반응형
반응형

문제

연속 부분 수열의 합을 개산하는 문제입니다.

 

* 파라미터 값이 배열의 값으로 들어오기 때문에 index 0가 마지막 부분 연결하는 부분을 신경써야 합니다.

 

자세한 내용!

 

코드

- 수열의 합을 배열에 넣는 방식을 사용했습니다.

- set()으로 중복된 값을 제거 하는 방법을 사용했습니다. 

중복된 값을 제거할 때 기존 리스트의 순서를 유지하고 제거하는 방법과 유지하지 않고 제거하는 방법 중 어떤것이 속도가 빠른지 확인했습니다.

set()과 이중 for()문 사용시 time = 1.0013580322265625e-05 걸렸습니다.

 

 

1. 이중 for

from collections import deque
def solution(elements):
    answer = 0
    elements = deque(elements)

    list = []
    for i in range(len(elements)):
        tmp = 0
        for j in range(len(elements)):
            tmp += elements[j]
            list.append(tmp)
        elements.rotate(-1)
    
    return len(set(list))

반응형
반응형
반응형

 

문제

괄호 회전하기 문제는 처음에 이해하기 어려웠습니다.

이 문제에서 중요한건 문자열만큼 for문을 돌리는 것, for ... else ... 사용해서 answer 값 증가 또는 유지 하는 것입니다.

 

 

자세한 내용!

 

코드

1. 스택

from collections import deque

def solution(s):
    answer = 0
    s = deque(s)
    
    for i in range(len(s)):
        s.rotate(-1)
        stack = []
        for ch in s:
            if ch == '(' or ch == '{' or ch == '[':
                stack.append(ch)
            else:
                if not stack:
                    break

                rear = stack.pop()
                if ch == ')' and rear != '(':
                    break
                elif ch == '}' and rear != '{':
                    break
                elif ch == ']' and rear != '[':
                    break
        
        else:
            if len(stack) == 0:
                answer += 1

    return answer

 

 

 

공부

- deque

- for ... else ...

 

반응형
반응형
반응형

런타임 에러가 발생할   수 있는 원인!

  1. 배열에 할당된 크기를 넘어서 접근했을 때
  2. 전역 배열의 크기가 메모리 제한을 초과할 때
  3. 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
  4. 0으로 나눌 떄
  5. 라이브러리에서 예외를 발생시켰을 때
  6. 재귀 호출이 너무 깊어질 때
  7. 이미 해제된 메모리를 또 참조할 때
  8. 프로그램(main 함수)이 0이 아닌 수를 반환했을 때

 

참조

https://www.acmicpc.net/board/view/22980

 

글 읽기 - 주로 런타임 에러가 발생하는 이유는 무엇인가요?

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

반응형
반응형
반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제

귤의 개수와 귤의 크기를 받아 같은 크기의 귤을 개수만큼 리턴할 때 가작 적은 숫자 구하시오. 

 

시도

- 귤의 개수가 1개면 1을 바로 리턴합니다.

- 귤의 크기 배열 값의 같은 값을 몇개씩 가지고 있는지 구합니다.

- 가장 많이 같은 값을 가지고 있는 순서대고 정리를 합니다.

 

코드

1. 첫 번째 시도

import time
def solution(k, tangerine):
    if k == 1: return 1

    answer = 0
    st = time.time()
    
    counter = [0] * len(set(tangerine))
    for x in tangerine:
    	try: counter[x-1] += 1
    	except: counter[x-1] = 1
    
    counter.sort(reverse=True)
    
    for x in counter:
        answer += 1
        k = k - x
        if k <= 0:
            break
    
    end = time.time()
    print(f'time = {st - end}')
    return answer

런타임 에러가 발생했습니다.

 

2.  런타임 에러 해결 후 코드

def solution(k, tangerine):
    if k == 1: return 1
    answer = 0
    
    counter = [0] * max(tangerine)
    for x in tangerine:
    	try: counter[x-1] += 1
    	except: counter[x-1] = 1
    
    counter.sort(reverse=True)
    
    for x in counter:
        answer += 1
        k = k - x
        if k <= 0:
            break
    return answer

 

 

반응형
반응형
반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제

문자열로 된 숫자에서 최소값과 최대값을 구한 후 문자열로 return.

(자세한 내용은 상단 프로그래머스 사이트에서 확인!)

 

시도

1. split(" ") 사용하여 문자열 값을 나눕니다.

2. map()을 통해 문자열을 정수 값으로 변경합니다.

3. map()을 사용 후 min()과 max() 사용하여 return 할려고 했지만 에러가 발생했습니다.

* ValueError: max() arg is an empty sequence

4.map()을 값을 다시 list() 함수를 사용하여 리스트 형태로 만들어 준 후 min()과 max() 값을 사용하여 결과 값을 return 했습니다.

 

알아야할 것

- split()

- map()

- list()

 

정답

def solution(x):
    arr = list(map(int, x.split()))
    return str(min(arr)) + " " + str(max(arr))
반응형
반응형
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/181188?language=python3 

 

프로그래머스

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

programmers.co.kr

 

 

문제

폭격 미상일을 요격할 때, 최소한으로 요격 미사일 수를 구해서 return 합니다.

(자세한 내용은 상단 프로그래머스 사이트에서 확인!)

 

주의사항

1. 단, 개구간로 표현되는 폭격 미사일은 s와 e에서 발사하는 요격 미사일로는 요격할 수 없습니다.

 

시도

1. defense 값 설정합니다.

2. sort()를 사용합니다.

* sort() 함수에서 reverse=True로 설정해도 시간이 느려지지 않습니다.

3. 배열의 [1] 값과 defense 값을 비교한 후 만약 defense 값이 크면 defense 값을 배열[0]의 값과 0.5를 더해 defense 값을 수정해줍니다.

* 0.5를 더한 이유는 s, e 구간에서는 요격할 수 없기 때문입니다.

 

알아야할 것

- sort(): 파이썬 정렬 함수입니다

 

정답

def solution(targets):
    answer, defense = 0, 100000001
    
    for s, e in sorted(targets, reverse=True):
        if e <= defense:
            defense = s + .5
            answer += 1

    return answer

걸린 시간: 4.291534423828125e-06

반응형

+ Recent posts