12/27 Programmers LV 2

김태준·2022년 12월 27일
0

Coding Test - Programmers

목록 보기
9/29

문제 풀이

부족한 금액 계산하기

def solution(price, money, count):
    answer = price
    for i in range(2, count+1):
        answer += price*i
    if answer >= money:
        return answer - money
    else:
        return 0

< 풀이 과정 >
놀이기구를 탈 때 마다 count번 탈수록 가격이 N배 증가하므로 이를 활용하고자 for문을 적용하였다.
price가 1부터 시작하므로 answer에 price를 입력하고 for문으로 2부터 순회해 answer += price*i로 값을 더해주고 answer가 money보다 적으면 (금액이 부족하면) 0을 리턴, 아니면 answer - money를 리턴

[3차]파일명 정렬

def solution(files):
    answer = []
    for word in files:
        head, number, tail = '', '', ''
        num_check = False
        for i in range(len(word)):
            if word[i].isdigit():
                number += word[i]
                num_check = True
            elif not num_check:
                head += word[i]
            else:
                tail += word[i:]
                break
        answer.append((head, number, tail))
    answer.sort(key = lambda x: (x[0].lower(), int(x[1])))
    return [''.join(i) for i in answer]

< 풀이 과정 >

  • files 내 배열들을 word로 저장하여 head, number, tail을 빈 문자열로 생성
  • 숫자임을 체크해주는 num_check boolean형으로 생성
  • word별로 숫자이면 number에 문자열 추가해주기
  • not num_check으로 숫자 나오기 이전 값들을 head에 저장
  • 숫자 나온 이후는 문자열 끝까지 tail에 저장하고 break 진행 (종료 조건을 안달아주면 for문 만큼 반복되기 때문)
  • answer에 head, number, tail 순으로 저장하고 파일명의 정렬 순서가 head기준으로 정렬(문자열 비교 시 대소문자 구분안하므로 소문자로 정렬) 후 number는 int형으로 정렬 진행

연속 부분 수열 합의 개수

def solution(elements):
    answer = set()
    element = elements*2
    for i in range(len(elements)):
        for j in range(len(elements)):
            answer.add(sum(element[j:j+i+1]))
    
    return len(answer)

< 풀이 과정 >
연속된 수열의 합을 계산하기 위해 스택, 큐를 구현해 pop을 이용하여 풀어볼까 생각도 했으나 리스트의 범위를 정할 수 없다고 생각이 들어 리스트의 2를 곱한 다른 사람의 풀이를 참고하였다.
기존 리스트 [7,9,1,1,4] * 2 = [7,9,1,1,4,7,9,1,1,4]로 출력되므로 이를 활용하여 2중 for문을 돌리고 인덱스 + elements 범위 만큼의 범위를 sum하여 set 자료구조에 저장한 다음 결과로 set 자료구조의 길이를 리턴한다.

profile
To be a DataScientist

0개의 댓글