본문 바로가기

코딩테스트

백준 2745번 진법변환문제

728x90

https://www.acmicpc.net/problem/2745

 

 

파이썬에서의 자료구조


여러개의 데이터가 묶여있는 자료형을 컨테이너 자료형이라함. 이러한 컨테이너 자료형의 데이터 구조를 자료 구조.

리스트 :순서가 있는 가변적인 데이터 구조, 리스트는 같은 타입이 아니어도 다양한 데이터 타입의 요소를 포함할 수 있으며, 요소를 수정하거나 삭제할 수 있음 []


튜플 : 순서가 있는 불변의 데이터 구조, 한 번 정의되면 요소를 변경하거나 삭제할 수 없습니다. 다양한 데이터 타입을 포함할 수 있음 ()


딕셔너리 : 키와 값의 쌍으로 구성된 데이터 구조, 각 키는 유일해야 하며, 키를 통해 해당 값을 빠르게 조회할 수 있으며, 키와 값 모두가 변할 수 있음 {}


셋트 : 순서가 없고, 중복된 데이터가 허용되지 않는 데이터 구조, 중복된 요소를 추가하려고 하면 자동으로 제거됨 {}

리스트
- 배열과 같이 여러 개의 데이터를 나열한 자료 구조
- [] 를 이용해서 선언, 데이터 아이템 구분은 ',' comma를 이용
- 데이터 타입 문자열, 정수형, 실수형 모두 가능함

인덱스
- 리스트 아이템은 인덱스를 이용해서 조회 가능함
- 존재하지 않는 잘못된 인덱스를 사용하면 오류남

enumerate함수 ( 이번 문제를 풀면서 새로 공부한 내용 )
- `enumerate()` 함수는 Python에서 반복 가능한 객체(iterable)와 함께 인덱스와 값을 동시에 가져오는 데 유용한 함수
- 리스트, 튜플, 문자열 등의 반복 가능한 객체를 순회하면서 각 항목의 인덱스와 값을 동시에 처리할 수 있다.

- 문법은 이런식으로 쓰이며 `enumerate(iterable, start=0)`  `iterable`: 반복 가능한 객체 (예: 리스트, 튜플, 문자열 등)
 `start`: 인덱스 시작값 (기본값은 0)을 넣는다.
- 반복 가능한 객체를 순회하면서 각 항목의 인덱스와 값을 튜플 형태로 반환하는 것이다.

# 리스트를 사용할때
fruits = ["apple", "banana", "cherry"]

for index, fruit in enumerate(fruits):
    print(f"Index {index}: {fruit}")
# 출력
Index 0: apple
Index 1: banana
Index 2: cherry

# 문자열을 사용할 때
word = "hello"

for index, char in enumerate(word):
    print(f"Index {index}: {char}")

# 출력
Index 0: h
Index 1: e
Index 2: l
Index 3: l
Index 4: o

# 시작 인덱스 지정시
animals = ["dog", "cat", "rabbit"]

for index, animal in enumerate(animals, start=1):
    print(f"Animal {index}: {animal}")

# 출력
Animal 1: dog
Animal 2: cat
Animal 3: rabbit


백준 2745 진법 변환 문제
- 이 문제에서 enumerate()를 사용하여 역순으로 처리한 문자열 N의 각 문자와 그 인덱스를 사용하게 코드를 구성했다.
- enumerate()는 문자와 해당 문자의 인덱스를 동시에 제공하고 있으므로, 이를 활용해서 다음과 같이 계산했다.

N, b = input().split()
ary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

N = N[::-1]  # 문자열을 역순으로 변환
result = 0

for i, n in enumerate(N):
    result += (int(b) ** i) * ary.index(n)  # 각 자리의 값을 계산하여 result에 더함

print(result)


내가 생각한 순서

 

- N을 역순으로 변환해서 enumerate()를 사용해 각 문자의 인덱스와 값을 동시에 가져온다음 b진법을 이용해 10진법으로 변환해 result에 출력

- 여기서 ary.index(n) 는 문자를 핻강 숫자로 변환시키는 것이고, (int(b) ** i)는 현재 자리의 위치에 해당하는 b의 거듭제곱을 계산



- 이 과정을 통해 b진법으로 표현된 수를 10진법으로 변환한 것이다.

 

728x90