프로그래머스 달리기 문제를 풀다가 알게 된 점

줍줍·2023년 5월 30일
0

Python

목록 보기
4/4
post-thumbnail

프로그래머스 달리기 경주

1️⃣ python에서의 입력


입력을 이해했다고 생각했는데 완전히 이해하지는 않았다.

수정 전

import sys

input = sys.stdin.readline

players = input().split(" ")
callings = input().split(" ")

여기서 split() 괄호 안에 아무것도 적지 않을 경우 \n, 를 기준으로 나눈다.

나는 여기서 split(" ")을 통해서 space를 기준으로 나누려고 했다.

근데 여기서 나누고 보니 마지막에 입력한 \n이 남아있었고, rstrip으로 없애려고 했지만,

rstrip은 string에서만 사용가능했다. 하지만 split(" ")에서는 space를 기준으로 list를 만들기 때문에 또 list를 string으로 만드는 방법을 찾는데 시간을 꽤 썼다..😂

공식문서를 확인하면, rstrip() 함수랑 split() 함수에 관해서 알 수 있다.

공식 문서 split()

str.split(sep=None, maxsplit=- 1)
sep 를 구분자 문자열로 사용하여 문자열에 있는 단어들의 리스트를 돌려줍니다. maxsplit 이 주어지면 최대 maxsplit 번의 분할이 수행됩니다 (따라서, 리스트는 최대 maxsplit+1 개의 요소를 가지게 됩니다). maxsplit 이 지정되지 않았거나 -1 이라면 분할 수에 제한이 없습니다 (가능한 모든 분할이 만들어집니다).

sep 이 주어지면, 연속된 구분자는 묶이지 않고 빈 문자열을 구분하는 것으로 간주합니다 (예를 들어, '1,,2'.split(',') 는 ['1', '', '2'] 를 돌려줍니다). sep 인자는 여러 문자로 구성될 수 있습니다 (예를 들어, '1<>2<>3'.split('<>') 는 ['1', '2', '3'] 를 돌려줍니다). 지정된 구분자로 빈 문자열을 나누면 [''] 를 돌려줍니다.

예를 들면:
sep 이 지정되지 않거나 None 이면, 다른 분할 알고리즘이 적용됩니다: 연속된 공백 문자는 단일한 구분자로 간주하고, 문자열이 선행이나 후행 공백을 포함해도 결과는 시작과 끝에 빈 문자열을 포함하지 않습니다. 결과적으로, 빈 문자열이나 공백만으로 구성된 문자열을 None 구분자로 나누면 [] 를 돌려줍니다.

수정 후

import sys

input = sys.stdin.readline

players = input().split()
callings = input().split()

이렇게 입력을 받으면 space와 \n 제거된 리스트를 만들 수 있다!

python에서 값을 교환하는 방식


c나 다른 언어에서는 ab를 변경하려면 같은 자료형을 가진 변수(temp)을 만들어서 옮긴다.

int a = 10;
int b = 11;
int temp
temp = a;
a = b;
b = temp;

하지만 python에서는 그냥 엄청 간단하게 변경했다.

a = 10
b = 11
a, b = b, a

python에서의 hash


hash table이라는 자료구조를 최근에 배웠는데 그냥 python에서는 dictionary를 이용하면 된다.

import sys

input = sys.stdin.readline


players = input().split()
callings = input().split()


def solution(players, callings):
    player_result = {player: index for index, player in enumerate(players)}
    index_result = {index: player for index, player in enumerate(players)}

    for call in callings:
        rank = player_result[call]
        player_result[index_result[rank - 1]], player_result[index_result[rank]
                                                             ] = player_result[index_result[rank]], player_result[index_result[rank-1]]
        index_result[rank -
                     1], index_result[rank] = index_result[rank], index_result[rank-1]

    return list(index_result.values())

#출처 https://somjang.tistory.com/entry/Programmers-%EB%8B%AC%EB%A6%AC%EA%B8%B0-%EA%B2%BD%EC%A3%BC-Python-featChatGPT


print(solution(players, callings))

결론


python은 정말 잘 만든 거 같다. pythonic한 코드를 만들 수 있도록 노력하자. 공식 문서를 확인하는 습관을 들이자!

profile
쉽게 설명하지 못하면 이해 못한 것

0개의 댓글