알고리즘(2)

정길규·2023년 5월 23일

수 조작하기 2

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

def solution(numLog):
    result = ''
    for i in range(1, len(numLog)):
        if numLog[i] - numLog[i-1] == 1:
            result += 'w'
        elif numLog[i] - numLog[i-1] == -1:
            result += 's'
        elif numLog[i] - numLog[i-1] == 10:
            result += 'd'
        elif numLog[i] - numLog[i-1] == -10:
            result += 'a'
    return result

마지막 두 원소

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

def solution(num_list):
    if num_list[-1] > num_list[-2]:
        num_list.append(num_list[-1] - num_list[-2])
    else:
        num_list.append(2 * num_list[-1])
    return num_list

수열과 구간 쿼리 2

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

def solution(arr, queries):
    list = []
    for s, e, k in queries:
        a = arr[s:e+1]
        a.sort()
        b = False
        for i in a:
            if i > k:
                list.append(i)
                b = True
                break
        if not b:
            list.append(-1)
    return list

수열과 구간 쿼리 3

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

def solution(arr, queries):
    for i, j in queries:
        a = arr[i]
        arr[i] = arr[j]
        arr[j] = a
    return arr

수열과 구간 쿼리 4

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

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

콜라츠 수열 만들기

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

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

배열 만들기 2

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

def solution(l, r):
    answer = []
    for i in range(l, r+1):
        if check(i):
            answer.append(i)
    if not answer:
        return [-1]
    return answer

def check(num):
    while num > 0:
        a = num % 10
        if a != 0 and a != 5:
            return False
        num //= 10
    return True
    

백준 1110번(더하기 사이클)

N = int(input())
new = N
count = 0
while True:
    a = (new // 10)
    b = (new % 10)
    c = a + b
    if c >= 10:
        c -= 10
    new = (b * 10) + c
    count += 1
    if new == N:
        break
print(count)

Python 입출력

프로그래머스와 다르게 백준은 입출력을 직접 입력해줘야 된다는 것을 뒤늦게 알게 되었다.(어제 공부한 알고리즘 문제가 전부 오답만 뜨던 이유를 알게 되었다.) 그래서 잘몰랐던 입출력 언어 공부를 오늘 정리하는 시간을 가가졌다.

하나의 값을 입력할 때

# 정수를 입력한다는 것을 가정함.
num = int(input())

python에서 input함수를 통해 입력값을 받게 되면 문자로 인식하기 때문에 int로 감싸줘야 정수로 값을 입력받게 된다.

여러 개의 값을 한번에 입력할 때

# 정수를 입력하는 것으로 가정함.
nums = list(map(int, input().split()))
# list를 씌웠기 때문에 리스트 형태로 값을 입력받음.

내장함수 sys를 통해 입력하는 방법

# 정수를 입력하는 것으로 가정함.
import sys

num = int(sys.stdin.raadline())

nums = list(map(int, sys.stdin.readline().split()))

2차원 배열 입력

# 4 5       이런 형태의 입력값이 들왔다고 가정.
# 1 0 0 0 0
# 2 2 0 0 0
# 3 3 3 0 0
# 4 4 4 4 0
# 5 5 5 5 5

Row, Col = map(int, input().split())
Board = [list(map(int, input().split())) for_in range(Row)]

for 문에서 변수 생략

입출력을 공부하면서 for문에서 변수명이 필요 없을시 생략해도 된다는 것을 알게되었다. (변수자리에 _ 로 대체가능)

list = [0 for _ in range(5)]   # [0, 0, 0, 0, 0]

마치며

오늘은 백준에 있는 문제보다는 프로그래머스에 있는 기초적인 문제를 더 많이 풀었다. 어제 알고리즘 문제를 풀면서 아직 컴퓨터언어에 미숙한 점이 많은 것을 느끼고 기초문제를 풀면서 문법공부를 하는게 더 나을 것 같아 이런 선택을 하였다. 그래도 입출력 문제가 해결되고 어제 문제가 정답으로 나오는 걸 보니 어제의 고생이 헛된 것은 아니였다.

0개의 댓글