적당한 고통은 희열이다

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

반응형

분류 전체보기 568

[Swift 알고리즘] Programmers 피보나치 수

○ Level 2 연습문제 피보나치 수 이거 먼저 풀었으면 멀리뛰기를 쉽게 풀었을듯. 문제 설명 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 다음과 같이 이어집니다. F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. 제한 사항 - n은 2 이상 100,000 이하인 자연수입니다. 입출력 예시 p..

modulo 10^9 + 7 이란? + 쓰는 이유?

프로그래밍 문제를 풀다보면 어떤 값으로 나눈 나머지를 반환값으로 요구하는 경우가 있다. 대표적으로 1000000007, 1000000009 등이 있는데, 왜 이런 값을 사용할까 궁금해져서 찾아보게 되었다. modulo 란? : the remainder of the division. 나눈 값의 나머지. 반환 값으로 modulo 쓰는 이유? Int 등의 자료형의 범위는 제한적이기에, 오버플로우를 방지하기 위해 모듈러 연산을 사용한다. 왜 1e9 + 7 ? 모듈러가 지나치게 작다면 언어의 표현력을 비효율적으로 사용하는 것이기에, Int 가 표현할 수 있는 범위를 최대한 활용하기 위해 Int의 max 값에 가까워야 한다. 참고 : hackerearth - Why output the answer modulo 10..

Algorithm/참고 2022.11.13

[Swift 알고리즘] Programmers 멀리뛰기

× Level 2 연습문제 멀리뛰기 정답률 64%라서 만만하게 봤는데, 함정? 이 꽤 있는 문제였다. 피보나치수열 / 점화식 / 정수 오버플로우 / 재귀말고 dp 문제 설명 멀리 뛰기를 연습하고 있습니다. 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 다음의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다. 제한 사항 - n은 1 이상, 2..

[자료구조] 스택 / 큐 (+ Swift 구현)

스택 Stack 곡차곡 쌓아 올린 형태의 자료구조. 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 후입선출 LIFO (Last In First Out) 구조 정해진 방향으로만 쌓을 수 있고, top으로 정한 곳을 통해서만 삽입/삭제할 수 있다. 스택에서 top을 통해 삽입하는 연산을 push, top을 통해 삭제하는 연산을 pop 이라고 한다. 스택 활용 예시) - 웹 브라우저 방문 기록 (뒤로 가기) : 가장 나중에 열린 페이지부터 다시 보여준다. - 실행 취소 : 가장 나중에 실행된 것부터 실행을 취소한다. 큐 Queue 줄을 서서 기다리는 것. 먼저 들어온 것이 먼저 나가는 선입선출 FIFO (First In First Out) 방식의 자료구조 큐는 한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제..

[알고리즘] 동적계획법 DP(Dynamic Programming)

DP가 왜 필요? DP의 장점? DP 문제 어떻게 알아보고 접근할지 1. 다이나믹 프로그래밍의 목적 DP 는 완전 탐색, DFS, BFS 와 같이 수많은 경우의 수를 전부 따져봐야 하는데, 경우의 수가 너무 많아서 속도가 느려지는 문제를 개선하고 수행시간을 단축하고자 만들어진 알고리즘. DP가 없던 시절에는 최단 경로를 찾거나, 최고 점수를 만들거나 하는 문제를 풀기 위해 모든 조합을 다 만들어 보는 수밖에 없었음. DP 알고리즘이 만들어진 후에는 수행시간을 현저하게 줄일 수 있었다. 예시) 프로그래머스 - 정수 삼각형 (Swift는 지원 안됌..ㅠ) => 메모리를 사용해서 중복 연산을 줄이고, 중복 연산을 줄여 수행 속도를 개선한다. 메모리를 사용한다 : 배열 혹은 자료구조를 만든다. 중복 연산을 줄인..

[Swift 알고리즘] Programmers 뉴스 클러스터링

△ Level 2 2018 KAKAO BLIND RECRUITMENT (3시간?😅) [1차] 뉴스 클러스터링 문제 풀면서도 계속 헷갈려서 오래 걸렸다.. 으 ! 진짜 카카오는 문제가 끔찍하게 길고 복잡한듯.. 🤢 문제 꼼꼼하게 잘읽자! 문제 설명 유사한 기사를 묶는 기준을 정하기 위해서 논문과 자료를 조사하던 튜브는 "자카드 유사도"라는 방법을 찾아냈다. 자카드 유사도는 집합 간의 유사도를 검사하는 여러 방법 중의 하나로 알려져 있다. 두 집합 A, B 사이의 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의된다. 예를 들어 집합 A = {1, 2, 3}, 집합 B = {2, 3, 4}라고 할 때, 교집합 A ∩ B = {2, 3}, 합집합 A ∪ B = ..

[Swift 알고리즘] Programmers 영어 끝말잇기

○ Level 2 Summer/WinterCoding(~2018) (40분) 영어 끝말잇기 문제 설명 n명의 사람이 영어 끝말잇기를 한다. 사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해주세요. 제한 사항 - 끝말잇기에 참여하는 사람의 수 n은 2 이상 10 이하의 자연수입니다. - words는 끝말잇기에 사용한 단어들이 순서대로 들어있는 배열이며, 길이는 n 이상 100 이하입니다. - 단어의 길이는 2 이상 50 이하입니다. - 정답은 [ 번호, 차례 ] 형태로 return 해주세요. - 만약 주어진 단어들로 탈락자가 생기지 않는다..

[Swift 알고리즘] Programmers 프린터

○ Level 2 스택/큐 (1시간) 프린터 문제 설명 중요도가 높은 문서를 먼저 인쇄하는 프린터는 아래와 같은 방식으로 인쇄 작업을 수행. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요. 제한사항 - 현재 대기목록에는 1개 이상 ..

728x90
반응형