석사 졸업을 앞두고 취뽀를 하기 위해 코딩테스트는 1차 관문이다. 코딩테스트 준비를 혼자하기에는 여러모로 힘든 점이 있다고 생각했다. (외롭기도 하고,, 방향성을 잡기도 힘들고,,)

향해 99에서 열린 99클럽 코테 스터디 3기에 참여하게 되었다.

2024년 7월 22일부터 시작되는 이 스터디는 9월 2일까지 매일 1문제씩 문제를 풀고 자율적으로 스터디가 진행된다.

레벨은 비기너, 미들러, 챌린저가 있고, 언어는 파이썬 / 자바 두 언어가 있다.

이 스터디를 계기로 엄청난 발전을 이뤘냈으면 좋겠다..!

1. 오늘의 학습 키워드

  • 배열
  • 문자열
  • 시퀀스 객체
  • reverse, reversed
  • 뒤집기

2. 문제: 자연수 뒤집어 배열로 만들기

3. 나의 풀이

접근 방법

자연수의 각 자리 숫자를 하나의 요소를 뽑아낼 수 있어야 한다. 그러기 위해선, 주어진 int형의 인자 (n)을 시퀀스 자료형 형태로 만들어야 한다. n이 문자열 (str) 타입이 되면 각 요소를 자연스럽게 분리할 수 있다.


시퀀스 자료형이란?

파이썬에서는 리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형을 시퀀스 자료형 (sequence types)이라고 부른다.


전체 코드

def solution(n):
    return[int(i) for i in str(n)[::-1]]

코드 설명

  1. 문자열 반환
str(n)

먼저, 자연수 n을 문자열로 변환합니다. 이는 각 자리 숫자를 개별 문자로 다룰 수 있게 하기 위함이다. 예를 들어, n12345라면 str(n)"12345"가 됩니다.

  1. 문자열 뒤집기
str(n)[::-1]

문자열을 뒤집기 위해 슬라이싱(slicing) 기법을 사용한다. [시작:끝:스텝] 형태의 슬라이싱에서 [::-1]은 문자열을 처음부터 끝까지 -1 스텝으로, 즉 거꾸로 하나씩 읽어오는 것을 의미한다. 따라서 "12345"[::-1]"54321"이 된다.

[::-1] 방법이 떠오르지 않는다면 reversed(), reverse() 함수가 있다.

  1. 리스트 내포를 통한 변환
[int(i) for i in str(n)[::-1]]

마지막으로, 뒤집어진 문자열의 각 문자를 정수로 변환하여 리스트로 만든다. 리스트 내포(list comprehension)를 사용하여 매우 간결하게 작성할 수 있다. 여기서 for i in str(n)[::-1]는 뒤집어진 문자열의 각 문자를 순회하며, int(i)는 해당 문자를 정수로 변환한다. 결과적으로 [int(i) for i in "54321"][5, 4, 3, 2, 1]이 된다.


4. 다른 방법 및 skill

시퀀스 자료형은 뒤집기 방법에 여러 개가 있다. 내가 사용한 방법은 [::-1] 방법이지만, reverse(), reversed()와 같은 함수를 사용하는 방법이 있다.

reverse() 메서드

reverse() 메서드는 리스트 객체에서 사용되는 메서드로, 리스트를 제자리에서(in-place) 뒤집는다. 즉, 원본 리스트 자체를 수정하며, 새로운 리스트를 반환하지 않는다.

사용법

# 예제 리스트
my_list = [1, 2, 3, 4, 5]

# 리스트 뒤집기
my_list.reverse()

# 결과 출력
print(my_list)  # 출력: [5, 4, 3, 2, 1]

reversed() 함수

reversed() 함수는 시퀀스 자료형(예: 리스트, 문자열, 튜플 등)을 인수로 받아서, 해당 시퀀스를 뒤집은 새로운 이터레이터(iterator)를 반환한다. 이 함수는 원본 시퀀스를 수정하지 않고, 뒤집힌 결과를 새로운 이터레이터로 제공힌다.

사용법

# 예제 리스트
my_list = [1, 2, 3, 4, 5]

# 이터레이터 출력
print(reversed(my_list)) # 출력: <list_reverseiterator object at 0x7e3df37261a0>

# 리스트 뒤집기
reversed_list = list(reversed(my_list))

# 결과 출력
print(reversed_list)  # 출력: [5, 4, 3, 2, 1]

# 원본 리스트는 그대로 유지됨
print(my_list)  # 출력: [1, 2, 3, 4, 5]

차이점 정리

  • reverse() 메서드:
    • 리스트 객체에서만 사용 가능.
    • 원본 리스트를 제자리에서 뒤집음.
    • 반환값이 없음(None 반환).
  • reversed() 함수:
    • 모든 시퀀스 자료형(리스트, 문자열, 튜플 등)에서 사용 가능.
    • 원본 시퀀스를 수정하지 않고, 새로운 이터레이터를 반환.
    • 반환된 이터레이터를 리스트, 문자열 등으로 변환 가능.

결론

reverse() 메서드와 reversed() 함수는 각각의 용도에 맞게 사용하면 된다. 원본 리스트를 그대로 두고 새로운 뒤집힌 시퀀스를 얻고 싶다면 reversed() 함수를 사용하고, 리스트를 제자리에서 뒤집고 싶다면 reverse() 메서드를 사용하자!


5. 결론

오늘은 자연수를 뒤집어 배열로 반환하는 문제를 파이썬으로 해결하는 방법을 살펴보았습니다. 이 코드는 파이썬의 기본적인 문자열 처리와 리스트 내포 문법을 이해하는 데 도움이 됩니다. 간단하지만 유용한 이 코드를 통해 파이썬의 다양한 기능을 더 깊이 이해할 수 있기를 바랍니다.

읽어주셔서 감사합니다!

6. 내일 할 일

  • 99클럽 문제
  • 프로그래머스 기초 문제
  • 프로그래머스 입문 문제
  • 딥러닝 코드 정리 및 복습
  • 자료구조 힙 정리
profile
할 수 있다

0개의 댓글