오늘은 오랜만에 새로운 알고리즘 문제로 돌아왔다. 바로 타입 확인 이라는 알고리즘인데 처음 오랜만에 푸는 다른 유형의 문제라서 어떤식으로 진행이 될 지 기대가 많이 되었고 문제를 풀면서 나름 재밌었던 것 같다.
1. 데이터 타입 확인
문제 설명
다양한 데이터 타입을 가진 항목들이 리스트로 주어집니다. 이 리스트에 있는 각 항목의 데이터 타입을 확인하고, 해당 타입의 이름을 문자열로 반환하는 코드를 작성해주세요. 지원되는 데이터 타입은 정수(int), 실수(float), 문자열(str), 리스트(list), 튜플(tuple), 사전(dict)입니다.
제한 사항
리스트는 다양한 데이터 타입의 항목을 포함할 수 있습니다.
각 항목은 오직 한 가지 데이터 타입만을 가집니다.
입출력 설명
주어진 리스트의 각 항목에 대해 데이터 타입을 확인하고, 그 타입의 이름을 문자열로 반환합니다. 예를 들어, 123은 'int', 'hello'는 'str', [1, 2, 3]은 'list' 등으로 타입이 결정됩니다.
문제를 읽으면서 최근 손도 못대던 문제들을 풀어서인지 나름 쉽게 느껴졌다. 주어진 data의 타입 형태를 리스트로 뽑음면 되는 것이었는데, type을 사용해서 뽑으면 되겠다라고 생각을 했다. 그 다음 리스트로 출력물을 뽑아야하니 리스트 컴프리헨션을 사용하였고 뽑아보았더니 <> 가로 안에 값들이 들어가 없애 주어야 했다. 그래서 혹시나 하고 매직메서드를 찾아보니 __name__ 을 활용하면 type만 출력할 수 있다는 정보를 보아서 바로 출력해 주었다.
def solution(data):
return [type(i).__name__ for i in data]
리스트컴프리헨션 안에 type으로 data의 각 타입을 출력할 준비를 해주고 __name__이라는 매직메서드를 활용해 간단하게 필요값만 추출했다.
2. 타입 확인
문제 설명
여러 클래스 이름과 이 이름의 인스턴스가 주어집니다. 각 인스턴스가 특정 클래스의 인스턴스인지 확인하는 코드를 작성해주세요.
제한 사항
클래스는 파이썬의 기본 데이터 타입입니다.
안에 클래스와 인스턴스 매칭이 모두 올바른 경우 True를 그 외의 경우에는 False를 반환해주세요.
isinstance와 issubclass 함수를 사용하진 않습니다.
입출력 설명
주어진 각 튜플에 대해, 첫 번째 요소는 클래스의 문자열 형태, 두 번째 요소는 인스턴스입니다. 각 튜플에 대해 두 번째 요소가 첫 번째 요소 문자열의 형태인지 확인하고, 결과를 True 또는 False로 반환합니다. 이렇게 반환한 요소가 모두 True이면 True를, 하나라도 False라면 False를 출력하는 코드를 작성해주세요. 예를 들어, ('list', [1, 2, 3]), ('int', 4), ('str', 'hello')는 True, True, True이기 때문에 True입니다.
문제를 보니 위의 문제와 비슷하다고 생각을 했다. 하지만 큰 차이는 클래스와 인스턴스를 각자 판단을 해서 그것들이 True인지 False인지를 구분지어주어야했다. 먼가 처음에는 쉽겠다 생각했지만 읽을수록 이거는 어떻게 하는거지..? 라는 생각이 들었다. 이유는 제한 사항을 보면 isinstance와 issubclass 함수를 사용하진 않습니다.이런 문구가 있었는데 그렇기에 다른 방법을 사용하여야 했다. 우선 앞서 푼 문제와 비슷하게 풀어보려 리스트컴프리헨션안에 type을 볼 수 있게 코드를 작성해주고 여러번 다양하게 시도하다가 결과값을 도출하는데 성공했다.
def solution(data):
return all([type(instance).__name__ == class_ for class_, instance in data])
d문제를 풀어본 과정을 살펴보면 위 문제와 매우 흡사하다. 리스트 컴프리헨션 안에 type 과 __name__ 을 활용하였고 그것에 넣어줄 변수들을 class_, instance 로 data에서 나누어 받아주었다. 그 후 반환한 요소가 모두 참이어야 True를 반환해야 했기에 all 을 사용하여 묶어주었다.
복잡한 문제를 풀다가 오랜만에 간단한 문제를 만났던 느낌이다. 풀이를 안보고 스스로 문제를 풀어낸 것이 오랜만이라 기분은 좋지만 이것 또한 시간이 오래걸렸고 바로바로 떠오르지는 않기에 기초부터 탄탄히 해보자 라는 다짐을 했다.
'Pyalgo100' 카테고리의 다른 글
2024.01.31 (수) Pyalgo100 파이썬 문제풀이 (0) | 2024.01.31 |
---|---|
2024.01.30 (화) Pyalgo100 파이썬 문제풀이 (2) | 2024.01.30 |
2024.01.28 (일) Pyalgo100 파이썬 문제풀이 (0) | 2024.01.28 |
2024.01.27 (토) Pyalgo100 파이썬 문제풀이 (4) | 2024.01.27 |
2024.01.25 (목) Pyalgo100 파이썬 문제풀이 (2) | 2024.01.24 |