파이썬 알고리즘 3주차 : 촌수계산, 트리의 부모 찾기, 구슬 찾기

1.개발 진행 및 완료상황 2주차 python algorithm dfs 문제 1회독 완료 CSAPP 2주차 목표 읽기 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 2644(파이썬) 2644번: 촌수계산 문제 우리 나라는 가족 혹은 친척들 사이의 관계를 촌수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이러한 촌수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자식 사이를 1촌으로 정의하고 이로부터 사람들 간의 촌수를 계산한다. 예를 들면 나와 아버지, 아버지와 할아버지는 각각 1촌으로 나와 할아버지는 2촌이 되고, 아버지 형제들과 할아버지는 1촌, 나와 아버지 형제들과는 3촌이 된다. 여러 사람들에 대한 부모 자식들 간의 관계가 주어졌을 때, 주어진 두 사람의 촌수를 계산하는 프로그램을 작성하시오. 입력 사람들은 1, 2… ...

2023년 3월 18일 · 4 분 · 배준수

파이썬 알고리즘 3주차 : 트리 순회, 이진 검색 트리, 최소 스패닝 트리, DFS와 BFS, 연결 요소의 개수

1.개발 진행 및 완료상황 3주차 python algorithm 그래프 탐색 기본 개념 공부 3주차 python algorithm 그래프 탐색 기본 문제 풀이 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 1991 1991번: 트리 순회 1991번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 트리 순회 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 43388 28410 21707 66.502% 문제 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오. 예를 들어 위와 같은 이진 트리가 입력되면, 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 … ...

2023년 3월 17일 · 13 분 · 배준수

파이썬 알고리즘 3주차 : 카드 정렬하기, 괄호, 괄호의 값, 가운데를 말해요, 행렬 제곱

1.개발 진행 및 완료상황 2주차 python algorithm 종료 3주차 python algorithm 시작 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 1715 1715번: 카드 정렬하기 1715번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 게시판 카드 정렬하기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 46099 15534 11930 33.435% 문제 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장의 숫자 카드 묶음을 합치려면 50번의 비교가 필요하다. 매우 많은 숫자 카드 묶음이 책상 위에 놓여 있다. 이들을 두 묶… ...

2023년 3월 16일 · 7 분 · 배준수

파이썬 알고리즘 2주차 : 공유기 설치, 사냥꾼, 색종이 만들기, 곱셈, 탑, 크게 만들기,

1.개발 진행 및 완료상황 2주차 python algorithm 틀린 문제 복습 완료 CSAPP 2주차 목표 읽기 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 2110(파이썬) 2110번: 공유기 설치 2110번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 게시판 공유기 설치 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 55494 18901 13282 36.209% 문제 도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x 1 , …, x N 이고, 집 여러개가 같은 좌표를 가지는 일은 없다. 도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수… ...

2023년 3월 15일 · 5 분 · 배준수

파이썬 알고리즘 2주차 : 정렬

1.개발 진행 및 완료상황 2주차 python algorithm 문제 1회독 완료 이분탐색 백준 문제 복습 완료 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 코드 구성에 있어서 전체적인 구조가 잘못되기 보다는 세부적으로 틀려 반례가 존재하여 오답처리 되는 경우가 많았다. 반례를 찾는게 꽤 힘들었는데 같은 수의 입력, 최솟값 이나 최댓값 입력 등인 경우가 많았다. 범위 설정 등에서 신경을 많이 썼다. 새로 배운 내용 기존에 list.sort() 를 통해 오름차순으로 정렬하는 방법을 썼다. 하지만 리스트 내 원소가 리스트인 경우, 내부 리스트의 특정 index에 맞춰 정렬한다거나, 내림차순으로 정렬하는 등 세부적인 옵션을 부가하는 방법을 몰랐다. 첫번째 줄은 정렬 후 저장하여 원형이 변형되는 경우, 두번째는 변형되지 않는 경우, 세번째줄은 reverse = True 일경우 내림차순정렬이 된다. 마지막으로 리스트인 원소의 두번째 값으로 오름차순 정렬하는 코드이다. list.sort() sorted(list) list.sort(reverse = True) list.sort(key = lambda x : x[1]) ...

2023년 3월 14일 · 1 분 · 배준수

파이썬 알고리즘 2주차 : 큐 2, 카드2, 요세푸스 문제 0, 뱀

1.개발 진행 및 완료상황 2주차 파이썬 알고리즘 공부 ‘큐’ 문제 1회독 완료 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 18258번 문제(파이썬) : 문제에 나온대로 입력값을 알맞게 처리하고 출력하는 문제였다. 쉽게 코드를 썼지만 시간초과로 오답처리 되었다. ‘pop’이 나올때 해당 queue에서 원솟값을 삭제하도록 만들었는데, 시간 복잡도를 낮추기 위해 냅두고 현재 주목하고 있는 index값을 올려주도록 하였다. 불필요한 과정을 없애는 것 뿐만 아니라 계산을 단순화하는 것도 하나의 방법이 될 수 있다는 것을 알았다. 아래는 정답 코드이다. import sys n = int(sys.stdin.readline()) read = 0 answer = [] for i in range(n): order = sys.stdin.readline().strip() if order.split()[0] ==‘push’: answer.append(int(order.split()[1])) elif order.split()[0] ==‘pop’: if len(answer)-read == 0: print(-1) else: print(answer[read]) read += 1 elif order.split()[0] ==‘size’: print(len(answer)-read) elif order.split()[0] ==‘empty’: if len(answer)-read == 0: print(1) else: print(0) elif order.split()[0] ==‘front’: if len(answer)-read ==0: print(-1) else: print(answer[read]) elif order.split()[0] ==‘back’: if len(answer)-read ==0: print(-1) else: print(answer[-1]) ...

2023년 3월 12일 · 6 분 · 배준수

파이썬 알고리즘 2주차 : 탑

1.개발 진행 및 완료상황 2주차 파이썬 알고리즘 공부 스택 문제 1회독 완료 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 문제 2493번을 파이썬으로 풀었다. 스택과 관련된 문제로 스택(파이썬에선 list지만)을 정방향으로 볼지(왼쪽부터), 반대방향으로 볼지(오른쪽)에 관련된 문제였다. 주목한 원소가 다음 원소와의 크기 비교를 통해 스택에서 pop을 할지 push를 할지 관련된 문제였는데, 경우에 따른 분류가 힘들었다. 위와 같이 정렬한 자료구조를 역순으로 바라보는 문제가 많았는데 정렬을 뒤바꾸는 것과 읽는 방향을 바꾸는 방법이 있었다. 때에 따라 사용하기 위해 둘 다 알아놓아야겠다. 밑의 첫번째는 오름차순 정렬, 두번째는 내림차순 정렬이다. list.sort() list.sort(reverse=True) ...

2023년 3월 11일 · 2 분 · 배준수

파이썬 알고리즘 2주차 : 이분탐색, 분할정복 공부

1.개발 진행 및 완료상황 2주차 파이썬 알고리즘 공부 이분탐색 ,분할정복 개념정리 및 문제 1회독 완료 스택 개념정리 및 난이도 하 문제 1회독 완료 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 백준 문제들 중 ‘괄호’관련된 문제에서 어려움을 겪었다. 사실 단순히 완성된 괄호인지를 판별하는 문제는 스스로 만든 코드로 완성되었는데, 이 코드를 이후 계산과 연관된 문제에 적용하니 되지 않았다. 코드를 다시 한번 점검해볼 필요성을 느꼈다. 이분탐색 문제는 변수를 설정함에 따라 목표에 달성했는지, 목표를 달성하면서 변수의 최댓값이나 최솟값을 설정하는 문제가 많았다. pl,pr,pc를 index값으로 설정할 것인지 원솟값으로 설정할지 잘 생각해야 한다. ...

2023년 3월 10일 · 1 분 · 배준수

파이썬 알고리즘 1주차 : 정렬에 관한 공부

1.개발 진행 및 완료상황 1주차 Python Algorithm 문제풀이 완료 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 Quick sort를 이용하여 주어진 수를 오름차순으로 정렬하고 싶었다. 교과서로 Quick sort가 가장 빠르다고 읽어서, 그냥 가장 좋은 기능이겠거니 생각하였다. 코드도 복잡해지고 잘 안되어서 단순선택 정렬로 했다. 주어진 정수 정렬하여 출력하는 문제에서 메모리가 적게 주어졌다. 다른 문제들처럼 하니 메모리 초과 문제로 오답처리 되었다. 입력되는 수의 개수는 10만개 이상이였지만 주어지는 수의 크기는 1만 이하였기에 분명히 겹칠 가능성이 있을거라 생각했다. 그래서 1만1개짜리 리스트(인덱스와 그 위치가 나타내는 수를 일치시키기 위해서)를 만들어 각 수가 나올때마다 그 수를 인덱스로히는 리스트의 원소를 1씩 늘려준 후 각 인덱스값을 원소만큼 출력하도록 반복함수를 구성하였다. ...

2023년 3월 8일 · 2 분 · 배준수

파이썬 알고리즘 1주차 : 재귀함수

1.개발 진행 및 완료상황 1주차 Pyton Algorithm 문제 진행중(재귀함수) Python Algorithm 5강 학습 완료 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용 여러 줄의 input값을 지정하는 경우 이 코드를 이용해 해결하였다. 첫째줄에는 2개, 둘째줄은 셋째줄부터 input 줄의 갯수였다. import sys data = [] for i in range(2): data.append(list(map(int,sys.stdin.readline().split()))) 새로 배운 내용 재귀함수 set, pos의 특성 제곱근 (3**2) 리스트의 원소를 하나의 문자열로 만들기(join) 참고할 만한 레퍼런스들 자료구조와 함께 배우는 알고리즘 입문 파이썬편(BohYoh Shibata 지음, 강민 옮김, 이지스 퍼블리싱) ...

2023년 3월 7일 · 1 분 · 배준수