[TIL]23.05.06(토)
·
TIL
이제 알고리즘주차가 끝나고 cs지식을 쌓을 수 있는 단계들이 남았다. 알고리즘에 대해서 깊게 배우기 전에는 알고리즘의 중요성에 대해 크게 느끼지 못했었는데 이번 한 달간 겪어보면서 알고리즘의 중요성에 대해 깨닫는 시간이 되었다. 파이썬으로 접근해서 보다 쉽게 알고리즘에 대해 배울 수 있었다고 생각한다. 하지만 나는 자바 백엔드 개발자가 되고 싶기 때문에 마지막 나만의 무기 갖기 단계에서 스프링을 사용할 때 자바에 대해 다시 배우고 스프링까지 배우기에는 시간이 촉박할 것 같다고 생각이 들었다.. 요 근래 몇 번 고민을 하던 차였는데 마침 같은 고민을 하는 동료들이 있어서 같이 지금부터라도 자바를 사용해서 익숙해지는 것이 좋다는 의견으로 통일돼서 이제 앞으로는 자바를 통해서 코딩 테스트 공부 및 언어에 대해..
[프로그래머스] 광물 캐기 [Python]
·
알고리즘/프로그래머스
풀이 과정 1️⃣ 곡괭이 수 * 5 만큼의 광석만 캘 수 있으므로 광석의 크기가 이보다 더 클 경우 잘라준다. 2️⃣ 광물을 연속해서 5개를 캐야하므로 5개씩 광물을 잘라서 새로운 배열에 저장한다. 3️⃣ 광물은 주어진 순서대로, 곡괭이는 순서가 상관없으므로 광물을 다이아몬드, 철, 돌 순서대로 정렬한다. (중요💡) 4️⃣ 광물의 갯수만큼 반복하니 시간 복잡도는 O(N)이된다. 1번 풀이과정 코드 # 곡괭이의 수를 구한다. for i in picks: sum += i #곡괭이로 캘 수 있는 광물만큼 자른다. num = sum * 5 if len(minerals)>sum: minerals = minerals[:num] 2번 풀이과정 코드 #광물들을 조사한다. new_minerals =[[0,0,0] for..
[백준] 1379 강의실 2 [Python]
·
알고리즘/백준
이 문제의 분류는 그리디 알고리즘과 우선순위 큐를 활용해서 푸는 문제입니다. 그리디 알고리즘만 사용하고 우선순위 큐를 사용하지 않는다면 시간초과가 나서 우선순위 큐를 사용하는 방법으로 구현해봤습니다. k = int(s.readline()) #우선 순위 큐 저장 배열선언 heap =[] #출력값들을 저장할 배열선언 answer= [0] * (k+1) lecture = [list(map(int,s.readline().split())) for _ in range(k)] #강의를 시작시간과 끝나는시간 기준으로 정렬 lecture.sort(key=lambda x:(x[1],x[2])) 강의를 시작시간과 끝나는시간으로 정렬하고 heap에 넣어야 새로운 강의를 넣을 때 마다 비교가 가능하므로 정렬해준다. #1은 강의..
[백준] 1520 내리막길 [Python]
·
알고리즘/백준
이 문제는 얼핏하면 dfs, bfs처럼 보여서 나도 처음에는 dfs로만 구현을 했었다. 하지만 dfs로 구현하면 값이 커질수록 반복되는 구간이 증가하기때문에 당연히 시간초과가 났었고 이를 고치기 위해 dp를 이용한 방법을 추가시켰다. 처음에는 dp를 어떻게 적용해야하는지가 감이 안와서 주변 친구들에게 도움을 받아서 이해를 하게 되었다. 이 문제를 시작점에서부터 도착점으로 가는 경로의 수를 구하는 문제에서, 임의의 점(x, y)에서 도착점 까지의 경우로 세분화 하여 구한다면, 그 어떤 경로로 (x, y)에 도착 하기만 해도 그 때부터의 경우의 수는 다시 구할 필요가 없다. 이 관점으로 코드를 구현해보자. 우선 처음에 dfs만 구현해서 시간초과가 난 코드이다. from sys import stdin as s..
[자료구조] 레드블랙트리(Red-Black tree)
·
자료구조
1️⃣ 레드 블랙 트리(RB Tree) - 레드 블랙 트리는 이진 탐색 트리(BST)의 한 종류로 스스로 균형을 잡는 트리입니다. - BST의 단점을 개선하고 모든 노드의 색깔은 Red or Black 입니다. - 시간복잡도는 O(logN)입니다. 2️⃣ 레드 블랙 트리의 다섯가지 속성 1) 모든 노드는 Red or Black이다. 2) 루트 노드는 Black이다. 3) 모든 리프 노드(NIL)들은 Black이다. 4) Red 노드의 자식은 Black이다. -> Red가 연속적으로 존재할 수 없다. 5) 모든 리프 노드에서 Black Depth는 같다. (자기 자신은 카운트에서 제외) 💡NIL 노드란? - 존재하지 않음을 의미하는 노드로 자녀가 없을 때 자녀를 nil 노드로 표기한다. - 값이 있는 노드..
[C] Linux/gcc 사용법 , vi 에디터 명령어
·
C언어
💡gcc 컴파일 및 사용법 1️⃣ 파일 생성 및 편집방법 - nano : nano hello.c - vim : vim hello.c ⚠️ vim, nano 가 설치안되있을 경우 sudo apt-get install vim(nano)를 사용해서 설치하시면 됩니다. 2️⃣ 텍스트 편집기에서 'hello.c' 파일의 내용을 작성합니다. 📚알아두기 - 편집기 명령어 i, a -> 문자열을 커서 이전에 삽입, 커서 이후에 삽입 :x -> 파일 저장 후 종료 :wq -> 파일 저장 후 종료 :w -> 파일 저장 q -> 파일 종료 위의 명령어 말고도 다양한 명령어가 존재하므로 아래 블로그 참고하시기 바랍니다. https://harryp.tistory.com/10 [Ubuntu] Vi / Vim 에디터 명령어 안녕하..
[백준] 11660 구간 합 구하기 5 [Python]
·
알고리즘/백준
저는 위의 문제를 다이내믹 프로그래밍을 활용해서 풀어봤습니다. 주어진 N의 크기와 M이 커질수록 시간이 급속도로 증가하기 때문에 dp로 값을 저장해 주고 필요한 연산만 걸쳐서 원하는 값을 출력하는 것이 시간에 걸리지 않기 때문에 dp를 활용했습니다. 우선 배열의 크기 N과 합의 횟수 M 을 입력받습니다. #입력 값 n = 배열의 크기 n*n , m = 합을 구해야하는 횟수 n,m = map(int,s.readline().split()) arr=[list(map(int,s.readline().split())) for _ in range(n)] #dp를 [1][1]시작하기위해 n+1로설정 dp=[[0]*(n+1) for _ in range(n+1)] dp는 알아보기쉽게하기위해 1,1부터 시작하려고 범위를 n..
[TIL]23.05.04(목)
·
TIL
첫 한 달간 알고리즘 주차가 오늘부로 끝났다. 처음에는 파이썬도 거의 사용 안 해봐서 모르는 상태였는데 한 달 지난 지금을 보면 간단한 알고리즘 문제들 정도는 풀 수 있을 것 같다. 아직 알고리즘들에 대해서 시간복잡도나 공간복잡도등 어느 순간에 어떤 알고리즘을 써야 효율적인지를 판단하는지는 많이 미숙하지만 앞으로 남은 4개월간 꾸준히 노력하면서 실력을 키워나갈 예정이다. 이제 내일부터는 C언어와 RB 트리에 대해서 배우는 과정을 새롭게 시작하는데 알고리즘 주차를 하면서 나도 모르게 느슨해졌던 모습을 다시 타이트하게 살아보도록 노력해야겠다. 요 며칠간 피곤해서 아침에 원하는 기상시간에 제 때 제 때 일어나지 못했는데 앞으로는 정한 루틴에 따라서 쫌 더 지킬 수 있도록 해봐야겠다. 시간이 천천히 가는것 같으..
yunchan^.^
유릉이의 개발 블로그