전체 글
-
리처드 파인만 공부방법, 암기 잘하는 방법TIL 2023. 9. 8. 21:51
1. 배우고 싶은 주제를 찾는다 2. 유튜브, 책 등을 찾아본다 3. 노트에 써 본다 4. 모르는 부분을 찾아본다 이 기법은 인(in)만 진행하는 일반 공부법과 달리 인과 아웃을 같이 진행하기 때문에 게임과 같이 재밌다. 이를 더 자세히, 학교 공부(암기)에 적용하면 외울 내용을 시간을 정해 외운다 노트에 써 본다 기억이 나지 않는(쓰지 못한) 부분을 다시 외운다 다시 노트에 써본다. 반복 외운 내용에 대한 문제집을 푼다 오답노트에 내가 틀린이유(외우지 못한것, 생각하지 못한것)을 쓴다 틀린이유를 공부한다 반복 시험 보기전, 오답노트만 다시 보면 100점이다
-
백준 2606번 바이러스 어떻게 풀었나.백준 2023. 1. 21. 00:01
푼 방법 bfs와 dfs를 생각하지 않고 그냥 문제을 읽고 생각나는데로 풀었더니 풀렸다. 기분 째진다 그래도 bfs와 dfs를 공부했다. bfs는 너비우선탐색, dfs는 깊이우선탐색이다. 어떻게 동작하는지는 대충 구글링 해보면 나온다. bfs는 큐를 이용해서 구현했고, dfs는 재귀함수를 이용해서 구현했다. 이 문제에서는 bfs와 dfs 둘중 아무거나 써도 상관이 없지만, 다른 문제를 풀때는 웬지 상관이 있을거 같다. bfs와 dfs를 구현하기 전에 입력을 받아야 하는데, 그 입력은 이차원 리스트 graph를 만들어서 인덱스마다 연결된 노드들을 저장해 주었다. 코드 내가 직관적으로 푼 코드 import sys N = int(input()) K = int(input()) A = [list(map(int, ..
-
가장 기본적인 알고리즘, 브루트 포스(Brute Force) : 모든 경우 고려하는 알고리즘영상, 글 요약 2023. 1. 20. 00:01
#1 들어가기 전 브루트 포스(Brute Force) brute: 무식한, force: 힘 브루트 포스는 모든 경우를 고려하는 알고리즘이다. 그러므로, 시간을 오래 걸리더라도 100% 정확한 답을 찾을 수 있다. #2 본론 브루트 포스 알고리즘을 문제에 직접 적용하려면 우선 인풋의 범위와 시간제한을 확인해야 한다. 모든경우를 고려했을때, 예상되는 연산의 수를 계산해 보고 그 연산을 시간제한 안에 완료할 수 있는지 여부를 확인하는 작업이다. pypy3로 제출 할 경우, 1초에 약 2000만~1억번의 연산이 가능하다. 일반 python3로 제출할 경우, 1초에 약 2000만번의 연산이 가능하다. 또한 c++의 경우, 1초에 약 1억번의 연산이 가능하다고 한다. 예를들어 주어진 배열중에 " 1 " 을 찾는다고..
-
이진검색(binary search) 파이썬 반복문으로 구현영상, 글 요약 2023. 1. 19. 00:01
#1 서론 이진검색(binary search)는 시간복잡도가 O(log n)으로 빠르다. 다만 구현이 조금 까다롭다. 이번 글에선 구현을 완전 익혀보려 한다. #2 본론 찾고자하는 값을 target변수에 저장해 주었고, target이 들어있는 배열 A를 저장 해 주었다. 이진검색을 사용하려면 배열이 오름차순으로 정렬되어있어야 한다. 구현: A = [1, 2, 3, 4, 5, 6] target = 5 start = 0 end = len(A)-1 while start A[mid]: start = mid +1
-
링크드리스트 설명영상, 글 요약 2023. 1. 18. 00:01
#1 서론 링크드 리스트에 대해 설명한다. 싱글리 링크드 리스트와 더블리 링크드 리스트의 차이점을 설명하긴 하나, 구체적인 설명은 글에 모두 담기 힘들어 생략한다. 다만 본질적인 차이점을 알려주니, 연산을 구현할때를 생각해 보면 차이점을 알 수 있을 것이다. #2 본론 링크드 리스트 설명 링크드리스트는 배열과 다르게 RAM에 데이터를 연속적으로 저장하지 않는다. 즉, RAM에 각 데이터가 흩어져 있다는 말이다. [배열은 RAM에 데이터를 어떻게 저장하나] 그럼 데이터가 흩어져 있는데, 어떻게 순서를 만들어서 리스트를 만드느냐, 그것은 바로 노드 덕분이다. 링크드 리스트는 '노드(node)'들을 연결 해서 리스트를 만든 것이다. 각 노드는 다음과 같이 구성되어있다. 구분 노드 싱글리 링크드 리스트 data..
-
정적배열, 동적배열 차이점 설명영상, 글 요약 2023. 1. 17. 00:01
#1 서론 정적배열, 동적배열은 조금 다르다. 이 둘의 차이점을 알아본다. #들어가기 전 들어가기전에 우리가 프로그램(파이썬, C)를 사용해서 데이터를 배열이나 리스트, 딕셔너리 등에 저장할때 그 데이터가 컴퓨터 어디에 저장되는지 알아보자. 우리가 프로그램으로 데이터를 저장하면, RAM에 저장된다. RAM은 Random access memory로 우리가 필요로 하는 값을 저장한 '주소'만 알고 있으면 바로 값을 가져올 수 있다. #2 본론 정적배열과 동적배열 정적배열과 동적배열의 차이점은 '저장공간을 예약했냐' 이다. 정적배열은 RAM에 저장할 데이터의 길이를 미리 예약해 둔다. RAM은 한 칸에 '바이트'의 데이터를 저장할 수 있는데, 정적배열은 그 칸을 연속적으로 길이만큼 예약하는 것이다. 그래서 정..
-
백준 7568번 덩치 어떻게 풀었나. 잘못 푼 과정 참고백준 2023. 1. 16. 00:01
잘못 푼 방법 입력을 A리스트에 모두 받는다. 몸무게를 첫번째, 키를 두번째 기준으로 정렬해 새로운 배열 sortA에 저장해 준다. 그후 알맞게 반복문을 돌려 sortA[i]와 sortA[i-1]을 비교하여 순위를 정해 준다. 그리고 중복되는 값이 있다면, 중복되는 값의 순위도 똑같이 복사 해 준다. (마지막 if문) from sys import stdin N = int(stdin.readline()) A = [list(map(int, stdin.readline().split())) for _ in range(N)] ranking = [-1]*N sortA = sorted(A, key=lambda x : (-x[0], -x[1])) count = 1 t = 0 for i in range(N): if i ..
-
백준 2447번 별찍기-10 어떻게 풀었나. 재귀함수 사용. 파이썬백준 2023. 1. 15. 00:01
푼 방법 우선 재귀함수(f(n))를 사용해서 문제를 풀기로 한다. 재귀함수 f(n) 에서는 총 n*n 을 출력한다. 그 출력을 9등분 하여 가운데 부분은 n//3 * n//3 크기의 " " (빈 문자열)을 출력한다. 그다음, 가운데 부분의 주변 8부분은 f(n//3)을 출력한다. 만약에 n == 3이라면 """***\n* *\n***"""을 출력한다. 처음에는 재귀함수 안에서 바로 별을 프린트를 해 주려 했으나, 그렇게 하면 f(3)을 여러번 출력할때 옆으로 계속해서 출력 할 수 없었다. 그러므로 이차원 배열(ans)에 저장하여 .join()함수로 출력해 준다. ********* * * ** * ********* *** *** * * * * *** *** ********* * ** ** * *******..