[코테준비]/[코테준비]Python

[코테준비]프로그래머스 코딩 기초 트레이닝 DAY7 Python <반복문>

bestFinanceDataAnalyist 2023. 7. 29. 11:30

프로그래머스 코딩 기초 트레이닝 연습풀이입니다. 모든 문제의 저작권은 프로그래머스에게 있으며 문제가 됐을 시 삭제하겠습니다.

 

https://school.programmers.co.kr/learn/challenges/training?order=acceptance_desc&languages=python3 

 

코딩 기초 트레이닝 | 프로그래머스 스쿨

프로그래밍 언어를 처음 접하거나 프로그래밍 언어에 익숙해지고 싶다면? 코딩 역량을 탄탄하게 길러주는 코딩 기초 트레이닝으로 차근차근 코딩에 대한 기초 감각을 길러 보세요.

school.programmers.co.kr

 


DAY7 반복문

수열과 구관쿼리 4 

문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.각  query마다 순서대로 s  i  e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다. 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

입출력 예

arr                                                 queries                                                                          result

[0, 1, 2, 4, 3] [[0, 4, 1],[0, 3, 2],[0, 3, 3]] [3, 2, 4, 6, 4]

입출력 설명

[0, 1, 2, 4, 3]
[1, 2, 3, 5, 4]
[2, 2, 4, 5, 4]
[3, 2, 4, 6, 4]
  • 따라서 [3, 2, 4, 6, 4]를 return 합니다.

슈도코드

day 6에서 했던 문제와 유사 / % 나머지 연산자를 활용하여 풀기

 

전체코드

def solution(arr, queries):
    for query in queries:
        s, e, k = query
        for i in range(s, e+1):
            if i % k == 0:
                arr[i] += 1
    return arr

 

배열만들기2

문제설명

정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요. 만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.

 

입출력

l                       r                               result

5 555 [5, 50, 55, 500, 505, 550, 555]
10 20 [-1]

 

슈도코드

나머지 연산자 코드를 생각해봤는데 생각보다 많고 포함되는게 있고 아닌것도 있어서 패스

대신에 set 함수를 이용함. 전체 숫자에서 0,5인거 빼서 추가하기

 

전체코드

def soultion(l,r):

         answer = []

         for num in ange(l, r+1):

                  if not set(str(num)) - set(['0','5']):

                        answer.append(num)

         return answer if answer else[-1]

 

 

카운트 업

 

문제설명

정수 start end가 주어질 때, start부터 end까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

 

입출력 예

start                end                      result

3 10 [3, 4, 5, 6, 7, 8, 9, 10]

슈도코드

start로 시작해서 end+1 로 끝나는 for 돌려서 append 이용해서 추가해보기

 

전체코드

def solution(start, end):
    answer = [ ] 
    for i in range(start, end+1):
        answer.append(i)
    return answer

 

콜라츠 수열 만들기

문제설명

모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부릅니다. 그리고 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부릅니다. 계산 결과 1,000 보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한 는 것이 알려져 있습니다. 임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return 하는 solution 함수를 완성해 주세요

 

슈도코드

while문을 사용해서 n!=1이 아닐때까지 돌리고 홀수 짝수 구분은 % 연산자 이용하기

 

전체코드

def solution(n):
    answer = [n]
    while n!=1:
        if n%2==0:
            n = n/2
        else:
            n = n*3+1
        answer.append(n)
    return answer

 

배열 만들기4

문제 설명

정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.

변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.

  • 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
  • stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
  • stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.

위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.

 

 

입출력예시

arr                                                                                                               result

[1, 4, 2, 5, 3] [1, 2, 3]

슈도코드

조건에 따라 if~elif~else문장 사용하기

 

전체코드

def solution(arr):
    stk = []
    i = 0
    while i<len(arr):
        if not stk:
            stk.append(arr[i])
            i+=1
        elif stk[-1]<arr[i]:
            stk.append(arr[i])
            i+=1
        else:
            stk.pop(-1)
    return stk