적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

분류 전체보기 592

[Swift 알고리즘] 백준 2231 분해합

백준 2231번 브루트 포스 예제 2단계 1차시도 : 69100KB / 296ms 아무런 조건 없이 그냥 1부터 다 검사하는 걸로 해도 시간은 오래걸리지만 통과는 되더라. func minGenerator(_ n: Int) -> Int { for i in 1...n { var sum = i for j in String(i) { sum += Int(String(j))! } if sum == n { return i } } return 0 } 2차시도 : 69100KB / 8ms 1부터 다 체크하는 건 비효율적이기 때문에 조건을 달아주었다. 입력 숫자가 256일 경우, 각 자리 수의 최대 합은 2 + 9 + 9 = 20 이 된다고 생각했다. 그러면 256의 생성자는 최소 256 - 20 = 236 이상이 될 수..

Algorithm/Baekjoon 2022.04.28

[알고리즘] 완전탐색 브루트 포스 Brute Force

브루트 포스 (완전탐색) 알고리즘 ex) 비밀번호가 될 수 있는 모든 조합을 다 시도해보는 기법 구현방법 1. for / while 반복문 2. 재귀함수 ex) 프로그래머스 - 소수 찾기 여러 숫자 카드들이 주어졌을 때, 카드들로 가능한 모든 조합의 숫자를 만들어보고, 그 중 소수의 개수를 구해야. 소수 판별 이전에 주어진 카드들로 모든 조합의 수를 만들 줄 알아야. 재귀함수를 계속 호출하면서 각 숫자 카드를 쓸지 안쓸지 결정하며 조합 만들기 브루트 포스만으로 풀 수 있는 코테 문제는 드물지만, 문제의 일부를 브루트 포스 알고리즘을 이용해 풀어야 하는 경우가 많다. => 어떤 종류의 완전 탐색도 기계적으로 잘 구현할 수 있도록 잘 익혀두기! 예) 프로그래머스 - 모의고사, 소수 찾기

[알고리즘] 해시 Hash

Hash Key : Value 의 형태를 갖는 하나의 자료구조 ex) 해시 = 전화번호부. 이름 : key, 번호 : value 해시의 특징 : 모든 데이터 타입으로 접근이 가능하다. 해시 문제들 백준 10816 숫자 카드 2 프로그래머스 - 완주하지 못한 선수 신고 결과 받기 위장 예) 프로그래머스 - 완주하지 못한 선수 n명이 마라톤 참가. n-1명만 완주. 완주하지 못한 1명을 찾는 문제 Hash를 사용하면 아주 간단하게 해결 가능 HashMap 생성. HashMap.put("A", true); HashMap["A"] = true; 와 똑같은 동작 bool fin = hashmap.get("A"); bool fin = hashmap["A"]; 와 같은 동작 getOrDefault 함수 getOrDe..

[Swift 알고리즘] 백준 10870 피보나치 수 5

백준 10870번 재귀함수 기초 예제 피보나치 수 let input = Int(readLine()!)! print(Fibonacci(input)) //재귀함수 func Fibonacci(_ n: Int) -> Int { if n == 0 { return 0 } else if n == 1 { return 1 } else { return Fibonacci(n - 1) + Fibonacci(n - 2) } } //재귀함수 축약 func Fibonacci(_ n: Int) -> Int { return n < 2 ? n : Fibonacci(n-1) + Fibonacci(n-2) } 재귀함수를 사용하면 코드가 직관적이고 가독성이 좋다. ternery operator를 사용하여 한 줄로 축약할 수도 있다. 반복문으..

Algorithm/Baekjoon 2022.04.27

[Swift 알고리즘] 백준 10872 팩토리얼

백준 10872번 재귀함수 기초 예제 팩토리얼 //반복문 let input = Int(readLine()!)! print(factorial(input)) func factorial(_ n: Int) -> Int { var result = 1 if n > 1 { for i in 2...n { result *= i } } return result } //재귀함수 let input = Int(readLine()!)! print(factorial(input)) func factorial(_ n: Int) -> Int { if n == 0 { return 1 } return n * factorial(n - 1) } //꼬리재귀 let input = Int(readLine()!)! print(factorial(in..

Algorithm/Baekjoon 2022.04.27

[알고리즘] 재귀 Recursion

재귀(Recursion)란? : 컴퓨터 과학에서 재귀란 자신을 정의할 때 자기 자신을 재참조하는 방법을 의미한다. 재귀 함수(Recursion Function)란? 함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식 특정 분기까지 자기 자신을 계속해서 호출하는데, 주로 반복문을 구현할 때 사용한다. for, while 등의 반복문으로 구현가능한 로직은 모두 재귀함수로도 가능하고 그 반대 역시 가능하다. 재귀함수의 가장 대표적인 사용 예제는 팩토리얼(Factorial) 재귀함수 공식 func 함수이름(매개변수) { if 종료조건 { return 종료값 } return 점화식 //결과값을 받을 변수 = 함수이름(입력변수) } 재귀함수 사용시 주의할 점 스택 오버플로우(stack overflow)를 주의해..

[알고리즘] 깊이/너비 우선 탐색 DFS/BFS

그래프 탐색 알고리즘 DFS / BFS 그래프 : 여러 개체들(node)이 간선(edge)로 연결되어 있는 자료구조 탐색 : 특정 개체를 찾기 위한 알고리즘. 그래프 탐색 : 하나의 노드로 부터 시작해 차례대로 모든 정점들을 한번씩 방문하는 것. * 그래프와 트리의 차이? 간단하게 말하자면 그래프 중에서 방향성이 있는 비순환 그래프를 트리라고 한다. 대표적 문제 유형 1. 경로 탐색 유형 (최단거리, 시간) 2. 네트워크 유형 (연결) 연결되어 있는 그룹의 갯수 구하기 or 두 개체가 같은 네트워크 속에서 연결되어 있는지 확인 3. 조합 유형 (모든 조합 만들기) 여러가지 조합 모두 만들고 비교 ex) 프로그래머스 타겟넘버, 네트워크, 단어변환, 여행경로 등 깊이 우선 탐색 (DFS, Depth-Firs..

[Swift 알고리즘] Programmers 기능개발

○△ Level 2 스택/큐 기능개발 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 - 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. - 작업 진도는 100 미만의 자..

728x90
반응형