프로그래밍/알고리즘(36)
-
[이것이 코딩테스트다] [Day4] 탐색 - DFS/BFS
📚 DFS (Depth-First Search) '깊이 우선 탐색'이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. 특정한 경로를 탐색하다가 특정한 상황에서 최대한 깊숙이 들어가서 노드를 방문한 후, 다시 돌아가 다른 경로로 탐색하는 알고리즘이다. ✅ 동작 과정 ( Stack 이용 ) 1️⃣ 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 2️⃣ Stack 의 최상단 노드에 방문하지 않은 인접 노드가 있다면 그 인접 노드를 Stack 에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 Stack 에서 최상단 노드를 꺼낸다. 3️⃣ 2️⃣번 과정을 더 이상 수행할 수 없을 때까지 반복한다. * '방문처리' 는 스택에 한 번 삽입되어 처리된 노드가 다시 삽입되지 않게 체..
2021.04.20 -
[이것이 코딩테스트다] 구현 - 완전탐색과 시뮬레이션
📚 구현 - 완전탐색, 시뮬레이션 구현(Implementation)이란 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정. 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제 완전탐색 : 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야하는 문제 유형 📃 [예제 1] 상하좌우 - 풀이시간 : 13분 - 문제풀이 # 1. 나의 풀이 n = int(input()) map = list(map(str, input().upper().split())) x,y = 1,1 for m in map: if m == 'R': y = y+1 if y+1 = 1 else y if m == 'U': x = x-1 if x-1 >= 1 else x ..
2021.04.18 -
[이것이 코딩테스트다] 시간복잡도와 공간복잡도
📚 복잡도 복잡도는 알고리즘의 성능을 나타내는 척도이다. 시간복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래걸리는지를 의미 공간복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지를 의미 복잡도를 측정함으로써 시간 복잡도에서는 알고리즘을 의해 필요한 연산의 횟수를, 공간 복잡도에서는 메모리의 양을 계산할 수 있다. 일반적으로 복잡도가 낮을수록 좋은 알고리즘이다. ⚡ 시간 복잡도 시간 복잡도를 표현할 때는 빅오Big-O 표기법을 사용한다. 빅오 표기법은 가장 빠르게 증가하는 항만을 고려하는 표기법이다. 다시 말해 함수의 상한만을 나타낸다. [예제 1] 시간 복잡도 O(N) 5개의 데이터를 받아 차례로 5회 더해준다(N = 5). 이 때 연산횟수는 N에 비례하는 것..
2021.04.18 -
[이것이 코딩테스트다] 그리디(탐욕법)
📚 그리디 (Greedy) 알고리즘 '탐욕법'이라고도 소개되는 이 알고리즘은 어떠한 문제가 있을 때 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘이다. 단순하지만 강력한 문제 해결 방법 매 순간 가장 좋아보이는 것을 선택. 현재의 선택이 나중에 미칠 여향에 대해서는 고려하지 않는다. 보통 코딩 테스트에서 출제되는 그리디 알고리즘 문제는 창의력, 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구 📃 [예제 1] 거스름돈 - 풀이시간 : 15분 - 문제풀이 n = 1260 count = 0 # 큰 단위의 화폐부터 차례대로 확인 list = [500, 100, 50, 10] for coin in list: count += n // coin # 해당 화폐로 거슬러 줄 수 있는 동전의 개수 세기..
2021.04.15 -
[프로그래머스] [Level1] 정수 내림차순으로 배치하기 - Java
💁♀️ 링크 programmers.co.kr/learn/courses/30/lessons/12933 📃 문제 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 🐾 문제풀이 💻 코드 class Solution { public long solution(long n) { char[] nums = String.valueOf(n).toCharArray(); for(int i=0; i
2021.04.07 -
[프로그래머스] [Level1] 제일 작은 수 제거하기 - Java
💁♀️ 링크 programmers.co.kr/learn/courses/30/lessons/12935 📃 문제 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 🐾 문제풀이 우선 제일 작은 수를 찾는다. 앞서 선언한 tempList에 제일 작은 수를 제외한 요소들을 추가한다. tempList 요소의 수가 0이면 -1을 채우고 리턴한다. 요소의 수가 0이 아니라면 tempList에 있는 요소들을 answer에 추가한다. 💻 코드 import java.util.*; ..
2021.01.08