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에 입력
라이브러리 사용하면 안되지않아요,,,?