본문 바로가기

Python

[Python] Lv.0 코딩 기초 트레이닝 - 수열과 구간 쿼리 4, 배열 만들기 2, 카운트 업, 콜라츠 수열 만들기, 배열 만들기 4

1. 수열과 구간 쿼리 4

  • s <= i <= e인 i
    • for s, e, k in queries:
    • for i in range(s, e+1):
  • i가 k의 배수면
    • if i % k == 0:
  • arr[i]에 1을 더하기
    • arr[i] =+ 1
def solution(arr, queries):    
    for s, e, k in queries:
        for i in range(s, e+1):
            if i % k == 0:
                arr[i] += 1
    return arr

 

2. 배열 만들기 2

  • l 이상 r 이하의 정수
    • for i in range(l, r+1):
  • 숫자 '0'과 '5'로만 이루어진 모든 정수
    • if all(n in ['0', '5'] for i in str(i)):
    • 내장함수 all()
      • 반복문으로 순회할 수 있는 모든 객체를 인자로 받음
      • list, tuple과 같은 파이썬에서 흔히 볼 수 있는 자료구조
      • all() 함수는 인자로 넘어온 자료구조 내의 모든 요소가 참일 때만 True
        • 하나라도 거짓인 요소가 있다면 False 반환
        • all([True, True, True]) => True
        • all([1, 1<2, 2+3==5]) => True
        • all([True, False, True]) => False
        • all([0, "", None, 1>2]) => False
    • n in ['0', '5']: n이 0이나 5로만 이루어져 있다면 True
    • for i in str(i): str(i) 문자열로 해야 각 자릿수를 개별 문자로 접근할 수 있음
      • i가 105라면 '1', '0', '5' 개별적으로 확인할 수 있음
      • 숫자로 접근한다면 105일 것임
  • 저장한 정수가 없다면 -1이 담긴 배열을 return
    • 저장한 정수가 없다는 말은 list가 비어있다는 말이므로
      • if len(answer) == 0:
      • answer.append(-1)
def solution(l, r):
    answer = []
    for i in range (l, r+1):
        if all(n in ['0', '5'] for n in str(i)):
            answer.append(i)
        
    if len(answer) == 0:
        answer.append(-1)
        
    return answer


3. 카운트 업

  • start_num과 end_num까지의 숫자를 차례로
    • for i in range(start_num, end_num+1):
  • 담은 리스트
    • answer.append(i)
def solution(start_num, end_num):
    answer = []
    for i in range(start_num, end_num+1):
        answer.append(i)
    return answer


4. 콜라츠 수열 만들기

  • 자연수 n이 1에 도달할 때까지 & 기록
    • while n != 1:
    • ...
    • answer.append(1)
  • n이 짝수면 2로 나누고 & 기록
    • answer.append(n)
    • if n % 2 == 0:
    • n = n/2
  • n이 홀수면 3*n+1로 바꾸고 & 기록
    • else:
    • n = 3*n+1
def solution(n):
    answer = []
    while n != 1:
        answer.append(n)
        if n % 2 == 0:
            n = n/2
        else:
            n = 3*n+1
    answer.append(1)
    return answer


5. 배열 만들기 4

  • 변수 i 초기값 0 & i가 arr의 길이보다 작으면 다음 작업 반복
    • i = 0: 변수 초기값 설정
    • while len(arr) > i: i가 arr의 길이와 같아지거나 더 커지면 반복문 종료
  • stk가 빈 배열이라면 arr[i]를 stk에 추가, i에 1 더하기
    • if len(stk) == 0: stk의 길이가 0이라면 배열이 비었다는 뜻
    • stk.append(arr[i]): stk 리스트에 arr[i] 추가
    • i += 1
  • stk에 원소가 있고 & stk 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 & i에 1을 더하기
    • elif stk[-1] < arr[i]: stk[-1]는 stk의 마지막 원소
    • stk.append(arr[i])
    • i += 1
  • stk에 원소가 있고 & str 마지막 원소가 arr[i]보다 크거나 같으면 stk 마지막 원소를 제거
    • else:
    • stk.pop()
      • 내장함수 pop(): list의 마지막 요소 제거
def solution(arr):
    stk = []
    i = 0
    while len(arr) > i:
        if len(stk) == 0:
            stk.append(arr[i])
            i += 1
        elif stk[-1] < arr[i]:
            stk.append(arr[i])
            i += 1
        else:
            stk.pop()
    return stk

 

참고 사이트: https://programmers.co.kr/

 

프로그래머스

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

programmers.co.kr

 

반응형