본문 바로가기

분류 전체보기

(144)
#32: DFS와 BFS 박현준 튜터의 BFS, DFS 강의를 듣고 풀이에 돌입했지만 이내 답안을 확인하였다. matrix라는 list를 선언하고 그것을 중심으로 하는 풀이였다. 전의 Queue문제와 마찬가지로 BFS, DFS의 개념에 대한 이해을 기반으로 하는 코드라는 생각이 들었다. 1번~ 40번 반복하면서 BFS, DFS 문제 맞닦트릴 때마다 그것을 계속 숙지해가면서 소스코드를 이해하고 결국에 처음부터 끝까지 홀로 코딩할 수 있어야되겠다.
#31: 큐 2 다음은 한번 스스로 완성시켜본 코드이다. N = int(input()) queue = [] for _ in range(N): command = input().split() if command == "push" + str(int): queue.append(int) elif command == "pop": if len(queue) == 0: print(-1) else: print(queue[0]) queue.pop(0) elif command == "front": print(queue[-1]) elif command == "back": print(queue[0]) elif command == "size": print(queue.len()) elif command == "empty": if len(queue)..
#30: 회전하는 큐 답안을 확인했다. deque를 collections로부터 import해오더라. 확실히 '큐(Queue)'에 대한 개념을 기반으로 그것을 코드로 구현한다는 생각이 들었다. 박현준 튜터님의 '큐' 단원 강의를 다시 시청하였다. LinkedList개념을 기반으로 설명한단 생각도 들었다. 또 이 강의의 알고리즘/자료구조가 파이썬 클래스 개념에 대해 숙지가 되어 있어야 한단 생각도 들었고. 여튼 분명 큐를 학습하려고 한건데 다른 개념까지 줄줄이 딸려나온 꼴이다. 시바타 보요의 자료구조/ 알고리즘 책에도 문제와 같은 원형의 큐 자료구조에 대해서도 다루던데 이 책으로 해당 단원을 학습하는 것도 도움이 될 것이다.
#29: 스택 수열 문제를 이해하는데도 다른 문제에 비해 시간이 걸렸다. 답안 코드를 확인해보아도 이해가 잘 가지 않았다. 일단 list를 두 개 선언하는 것까지는 알겠는데 count와 num 변수를 두고 while문과 if문을 활용하여 이리저리 코딩한 것에 대해 이해를 하는데 문제를 겪었다. 이 문제는 시간을 두고 반복적으로 풀이를 시도해야 될 듯 하다.
#28: 균형잡힌 세상 답안을 확인한 문제이다. 하지만 코드 해독이 불완전한 상태로 이루어졌다. 특히 if not 문에서 시간을 소모하였다. 필자는 스택을 '선형성'으로 이해한다. 답안 코드는 문장의 선형성을 활용하여 for - if - if 구조로 경우를 나누어서 풀이를 하였다. 스택 문제의 경우 이름이 stack인 list를 선언해주는 것이 기본인 듯하다. 또한 여러 줄에 걸친 input을 어떻게 해야할지 몰랐는데 sys.stdin.readlines()를 해주면 되었다. 시간이 너무나 지체되어 일단 이까지만 하고 넘어가기로 한다.
#27: 다리놓기 답안을 확인했다. 서두의 '조합'이라는 단어를 보는 순간 바로 코딩을 시작했다. 바로 전 문항의 이항계수 코딩을 활용하면 됐다. 다음은 코드이다. import math T = int(input()) for _ in range(T): N, M = map(int, input().split()) if 0
#26: 이항계수 import math N, K = map(int, input().split()) if 0
#25: 최소공배수 유클리드 방식의 최대공약수 구하는 방식을 이해해야겠다 생각하여 파이썬으로 그 방식을 구현한 코드를 이해하려 하였다. 하지만 우선 그 수학적 논리를 이해하는게 우선이라 생각하여 다음 자료를 찾았다. 이것을 구현한 코드가 다음과 같다. def gcd(x, y): while y: x, y = y, x % y return x 항해99 슬랙에다 질문해본 결과 1. while y란 y = 0일 때 무한 loop에서 빠져나온다는 의미이다. 2. x, y = y, x%y란 x = y와 y = x % y를 한 번에 표현한 것이다. 그러고 나면 최소공배수는 두 수의 곱에서 최대공배수를 나눈 값과 같다. 결과 코드는 다음과 같다. T = int(input()) def gcd(x, y): while y: x, y = y, x..