본문 바로가기

전체 글

(144)
#24: 괄호 T = int(input()) for _ in range(T): P = input() ls = list(P) sum = 0 for i in ls: if i == '(': sum += 1 elif i == ')': sum -= 1 if sum 0: print("NO") elif sum == 0: print("YES") 답안을 참조해가며 일단 완성시킨 코드이다. 1. sum = 0 을 for문 안에 위치시켜야 한다. 2. for문 안의 세번째 if문이 핵심이라 생각한다. 문제가 스택으로 분류되있었는데 이 세줄에서 그 이유를 알 수 있다. '선형성'을 이해해야 한다 생각한다. 괄호는 '(' -> ')' 순으로 진행된다. 즉 시작 괄호 없이 끝 괄호가 먼..
#23: 제로 import sys stack = [] K = int(sys.stdin.readline()) for _ in range(K): N = int(sys.stdin.readline()) if N == 0: stack.pop(-1) else: stack.append(N) print(sum(stack)) 답안을 확인하고 수정하여 정답이 된 코드이다. 다섯째 줄의 로직을 이해하고 원래 코드를 수정하니 문제가 해결이 되었다. 원래는 if문에 sys문을 포함시켰지만 if문 전에 변수 N을 미리 정의를 해주니 코드가 훨씬 간결해졌고 수정 전의 오류를 해결할 수 있었다.
#22 스택 import sys N = int(sys.stdin.readline()) stack = [] for _ in range(N): input = sys.stdin.readline().split() if input[0] == "push" + "int": stack.append(int) if input("top"): print(stack[-1]) if input("size"): print(stack.count()) if input("empty"): if stack.count() == 0: print("1") else: print("0") if input("pop"): if stack.count() != 0: stack.pop(stack[-1]) else: print("-1") 미완인 코드를 첨부한다. 처음에 i..
알고리즘 주간 #21 나무 자르기 이진 검색(이분 탐색) 기법을 활용하는 문제이다. 이분탐색이란 말그대로 리스트를 이분하여 탐색하는 것이다. 책을 참고하고 박현준 튜터의 강의를 한 번 들어보기도 하면서 개인 학습을 어느정도 하였다. 그러고 문제를 읽는데 시간을 소모하였고 어느 정도 풀이에 대해 생각하다가 답안을 확인하였다. 이분탐색을 활용한 코드였는데, while문 안에 for문, if문이 어떠한 구조를 갖고 코딩돼있었는데, 완전히 이해가 되지는 않았다. 40번 갈 때까지 이분탐색 문제가 없는 것으로 확인했다. 나중에 다시 돌아와서 그때는 이분탐색 개념적 기반을 확실히 다지는 것에 중점을 둬야겠다.
항해99 6.14~ 6.19 Week I Learned. 알고리즘 집중기에 해당하는 이 주에 정말로 알고리즘만 했다. 진행하는 내내 방법론적 구상도 함께 했다. 극초반대의 문제를 제외하고 답안을 참조하지 않고 해결한 문제는 없다. 알고리즘/자료구조 책이나 박현준 튜터님의 강의 등을 통해 학습을 하며 알고리즘/자료구조의 기본기를 닦는데 집중했다. 이번 집중기 때의 학습이 앞으로 알고리즘 실력의 기반이 될 거란 마음가짐으로 학습에 임했다. 학습을 진행하면서 알고리즘/ 자료구조를 배우는 데 실제로 재미를 느끼기도 했다. 본인에게는 커리어 목표가 있고 그것을 위해서는 항해99 수료 이후 첫번째로 일하게 될 곳이 중요하기 때문에 알고리즘 학습의 동기부여가 되었다. 일단 현재 목표는 집중기 마지막 날인 3일 뒤 수요일까지 40번까지 끝까지 가고 이후로 항해99 종료할 때..
알고리즘 주간 #20 좌표 정렬하기 2 역시 답안을 확인하였다. import sys 하여 sys.stdin.readline()으로 입력값의 총 줄수를 결정해주는 n값을 input 해주었다. 그리고 list(map())으로 나머지 줄 input을 구현하였다. 그리고 map 메서드는 append(list()) 메서드가 감싸고 있는데 이를 통해 생성된 list를 key = lambda를 활용하여 sort해준다. 이때 lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 하는 것으로, 보통 함수를 한줄로 간결하게 만들 때 사용한다. 일단 이 정도만 하고 넘어가겠다. 백준 알고리즘 한두번으로 끝낼 생각하면 안될 듯 하다.
알고리즘 주간 #19 하노이 탑 이동 순서 재귀를 사용한단 것은 알겠다. 하지만 답안 코딩을 보아도 어디서부터 손을 대야할지 모르겠다. 40번까지 진행하면서 재귀에 대해서 윤곽을 잡아가는 것이 필요할 듯 하다. 그리고 이제부터 제목에 '미완'을 따로 덧붙이진 않겠다.
알고리즘 #18 소수 구하기 (미완) 답안을 확인하였다. '에라토스테네스의 체'라는 개념이 필요한 문제이다. 이는 본 문제와 같은 상황에서 범위의 가장 작은 소수부터 시작하여 그것의 배수인 합성수를 지워나가는 방식으로 결국 범위의 소수를 도출해내는 방식이다. 이것을 코딩으로 구현해야 할 것인데, 일단 개념을 이해한 것만으로 넘어가겠다.