Coding Test

[Section05] Python 알고리즘 문제풀이 09~10

mooni_ 2024. 6. 14. 20:46

Q9. Anagram(아나그램 : 구글 인터뷰 문제) : 주어진 두 문자열의 구성이 동일한지 확인하여 결과 출력

입력 : 2개의 단어

출력 : YES 또는 NO 여부

 

[내가 쓴 코드]

a = list(input())
b = list(input())
dic = dict()

for x in a :  #첫번째 단어
    if x in dic :  #dic에 있는 글자면 value + 1
        dic[x] += 1
    else :  #dic에 없는 글자면 추가
        dic[x] = 1
        
for x in b :  #두번째 단어
    if x in dic :  #dic에 있는 글자면 value - 1
        dic[x] -= 1
    else :  #dic에 없는 글자면 조건에 맞지 않으므로 결과 출력
        print("NO")
        break
else :
    for v in dic.values() :  #모든 value가 0으로 존재하는지 확인
        if v == 0 :
            continue
        else :
            print("NO")
            break
    else :
        print("YES")

 

[풀이 코드]

a = input()
b = input()
sH = dict()

for x in a :
    sH[x] = sH.get(x, 0) + 1  #x가 있으면 + 1, 없다면 value를 0으로 추가
for x in b :
    sH[x] = sH.get(x, 0) - 1  #x가 있으면 - 1, 없다면 value를 0으로 추가

for x in a :
    if sH.get(x) > 0 :
        print("NO")
        break
else :
    print("YES")

dic.get()으로 if-else로 나눠서 처리한 걸 한번에 해결함

 

[풀이 코드 with. List]

a = input()
b = input()
str1 = [0]*52
str2 = [0]*52

for x in a :
    if x.isupper() :
        str1[ord(x)-65] += 1  #아스키코드값 활용
    else :
        str1[ord(x)-72] += 1
        
for x in b :
    if x.isupper() :
        str2[ord(x)-65] += 1  #아스키코드값 활용
    else :
        str2[ord(x)-72] += 1
        
for i in range(52) :
   if str1[i] != str2[i] :
       print("NO")
       break
else :
    print("YES")

 

 

근데 for문 돌면서 두 값이 같은 지 체크할 필요가 있나? 첫번째 풀이처럼 하나의 리스트만 만들고 +1, -1로 하면 최종적으로 모두 0인지 확인하는 거로도 답을 낼 수 있을 거 같음


Q10. 최소힙 : 자연수가 입력되면 최소힙에 입력, 숫자 0이 입력되면 루트 값 출력(힙이 비어있으면 -1 출력), -1이 입력되면 프로그램 종료

입력 : N개의 정수

출력 : 조건에 따른 연산 결과

 

[내가 쓴 코드]

import heapq

heap = []
node = 0

while node >= 0 :  #-1 입력 시 종료
    node = int(input())
    if node > 0 :  #양수를 입력받으면 heap에 추가
        heapq.heappush(heap, node)
    elif node == 0 :  #0 입력 시 heap에 남은 노드 확인 후 -1 출력 또는 root 출력
        if len(heap) == 0 :
            print(-1)
        else :  
            print(heapq.heappop(heap))

 

[풀이 코드]

import heapq as hq

a = []

while True :
    n = int(input())
    if n == -1 :
        break
    if n == 0 :
        if len(a) == 0 :  #a가 비어있을 경우 -1 출력
            print(-1)
            break
        else :
            print(hq.heappop(a))  #root 출력
    else :
        hq.heappush(a, n)  #heap에 입력

 

라이브러리 사용하면 안되지않아요,,,?