////////
Search

이도현

1. 전화번호 목록

1. 문제 풀이를 위한 접근 방식(or 개념) 설명

1.
for문
2.
해시 : 자료 접근 시간의 단축
a.
충돌이 없을 경우 공간 복잡도는 높아지나 시간 복잡도가 낮아짐 - O(1)
b.
충돌이 생길 경우 시간 복잡도 최대 O(n)

2. 기본 코드에 대한 설명

1.
이중 for문, startswith 활용
def solution(phone_book): for i in range(len(phone_book)): for j in range (len(phone_book)): # i, j가 서로 다르고 i의 시작 일부가 j와 같다. if i != j and phone_book[i].startswith(phone_book[j]): return False return True
Python
복사
startswith() : 접두어 판별
A = 'lee do hyun' B = 'lee' print(A.startswith(B)) #True
Python
복사
결과 : 테스트 통과 O, 효율성 테스트(3,4) 통과 X

3. 추가적으로 개선한 코드에 대한 설명

1.
풀이 과정
a.
배열 phone_book이 매개변수로 주어진다.
b.
phone_book의 모든 요소에 1을 짝지어 딕셔너리에 저장한다.
c.
키 값(phone_book)의 숫자 하나씩 front에 저장하고, front가 hashpmap에 있는지 확인
d.
front가 hashmap에 있고, 전화번호와 다르면 접두어 존재
def solution(phone_book): answer = True hashmap = {} for phone_number in phone_book: hashmap[phone_number] = 1 #key: phone_number, value: 1 for phone_number in phone_book: front = "" for number in phone_number: front += number if front in hashmap and front != phone_number: answer = False return answer
Python
복사
해시 : 해시값을 만든 뒤 %3 등을 통해 자료를 다시 정리하는 것. 그런데 hash(”11”) 과 hash(”1123”) 은 서로 다르다. 왜 해시를 쓰는거지? 왜 파이썬에는 이 과정이 없는 걸까?

4. 사용 라이브러리 정리

5. 추가적으로 개선한 코드에 대한 설명

6. 기타(문제 풀이에 어려웠던 점, 구현하고자 했는데 실패한 방식)

ex) 이 방식으로 접근했는데 구현이 힘들어서 개선했습니다. 그 방식으로 접근했는데 접근 방식이 잘못되었다는 것을 깨닫고 다시 풀었습니다.

2. 위장

1. 적용 알고리즘 개념 간단하게 설명하기

2. 문제 풀이를 위한 접근 방식(or 개념) 설명

예제 분석 결과 : 배열[0]은 중복값을 허용하지 않음. 배열[1]은 중복값을 허용 ⇒ 배열[0] : 배열[1] 이 키:값 으로 대응하는 딕셔너리를 만들면 됨
안경, 모자, 재킷이라면
{(안경 가짓수 +1 (아무것도 안 입었을 때)) * (모자 가짓수 + 1) * (재킷 가짓수 + 1)} - 1(아무것도 안 입은 경우)

3. 기본 코드에 대한 설명

def solution(clothes): #clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] closet = {} result = 1 for element in clothes:# clothes에서 key = element[1] # "headgear", "eyewear" value = element[0] # "yello_hat", "blue_sunglasses" if key in closet: # 매개변수로 주어진 리스트에서 키값이 closet에 있다면 closet[key].append(value) # 해당 key값의 value를 추가 else: closet[key] = [value] print(closet) for key in closet.keys(): # closet.key는 옷의 가짓수 result = result * (len(closet[key]) + 1) return result - 1
Python
복사

4. 추가적으로 개선한 코드에 대한 설명

-

5. 사용 라이브러리 정리

-

6. 기타(문제 풀이에 어려웠던 점, 구현하고자 했는데 실패한 방식)

ex) 이 방식으로 접근했는데 구현이 힘들어서 개선했습니다. 그 방식으로 접근했는데 접근방식이 잘못되었다는 것을 깨닫고 다시 풀었습니다.