CS 지식/Algorithm-Problem Solving 정리

URL : https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr 문제를 해석해 보면 n개의 음이 아닌 정수들이 주어진다. 이 정수 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟넘버를 만드는 문제이다. 예를 들면 [1,1,1,1,1]과 타겟넘버 3이 주어지면 -1 + 1 + 1 + 1 + 1 -> 3 과 같은 경우를 말하는 것이다. 즉, 주어진 정수들에 대해 부호반전을 해준 정수 리스트와 주어..
URL : https://www.acmicpc.net/problem/15624 15624번: 피보나치 수 7 첫째 줄에 n번째 피보나치 수를 1,000,000,007으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 살펴보기 피보나치 관련 문제이다. 입력은 첫줄에 n이 주어지고 이 n은 1000000보다 작거나 같은 자연수 또는 0이다. 출력은 n번째 피보나치 수를 1000000007로 나눈 나머지를 출력하는 것이다. 문제 풀이 우선적으로 큰 수에 대한 피보나치 수이므로, 처음에 동적계획법을 이용해서 접근하였다. import sys sys.setrecursionlimit(10**6) saved = [None] * 10000001 def fibonacci(x): if x == 0: return..
URL : https://programmers.co.kr/learn/courses/30/lessons/17680# 2->1 만약 여기서 2번 캐시를 호출하는 경우에는 2번 캐시를 꺼내서 캐시의 맨 앞에 넣는다. 2 -> 3 -> 1 4번캐시를 넣어야한다고 가정하자. 근데 저장공간이 3인 캐시이므로 꽉찬 상태이다.이런 경우, 가장 사용을 안하고 있는 마지막 자리에 있는 1을 빼고, 4를 넣어준다. 4 -> 2 -> 3 (1은 캐시에서 제거) 정리해보면 아래와 같다. 캐시 공간이 남아있는 경우, 캐시에 넣는다 캐시가 가득차있는 경우, 가장 오래된 데이터를 제거하고 넣어준다 해당 데이터를 꺼낸다 꺼낸 데이터를 가장 최근 데이터 위치(캐시의 맨 앞)로 보낸다. 위 LRU개념을 가지고 문제에 주어진대로 풀면 아래..
URL : https://programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 문제를 정리해 보자 인쇄 대기목록의 가장 앞에있는 문서를 대기목록에 꺼낸다(i라고 가정하겠다) 나머지 인쇄 대기목록에서 i보다 중요도가 높은 문서를 하나라도 존재하면, i를 대기목록 마지막으로 넣는다 없는경우에는 i를 인쇄한다. 예를 들어 문제에 제시된 4개의 문서 ABCD 대해 중요도가 [2,1,3,2]라고 한다면 아래와 같은 순서로 출력이된다 1) 2..
URL : https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제를 해석해보자 N장의 카드가 있다. 카드는 1부터 N까지의 번호가 붙어있으며, 1번카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여있다. 다음 두개 동작을 지속적으로 수행하며 한장 남을때 까지 반복하게 된다. 두가지 동작은 아래와 같다 가장 위에 있는 카드를 버린다 가장 위에 있는 카드를 카드의 마지막으로 옮긴다 N이 주어졌을때 제일 마지막에 남는 카드를 구하..
URL : https://level.goorm.io/exam/43246/%ED%81%90-queue/quiz/1 구름LEVEL 코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이 level.goorm.io 문제 조건들을 정리해보자 큐는 최대 10개의 자료가 들어갈 수 있고, 10개를 넘으면 overflow를 출력한다 큐가 비어있는 상태에서 Deque를 실행하면 underflow, 꽉 차있는 상태에서 Enque를 실행하면 overflow를 실행한다 프로그래밍 언어에서 제공하는 라이브러리를 사용하지 않고 문제 푸는것을 권장한다. 입력 조건들을..
URL : https://programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 문제를 요약해보면 입력으로 초단위로 기록된 주식 가격이 담긴 배열 prices가 주어지는데, 각 주식이 가격이 떨어지지 않는 기간은 몇초인지가 담긴 리스트를 return 하라는 문제이다. 접근법 각 요소들에 대해서 검사를 한다. 검사중인 요소 prices의 마지막 요소인 경우에는 떨어지는지 오르는지 알 수 없기..
URL : https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제를 간단히 요약해 보면 괄호기호로 구성되는 문자열을 PS(Parenthesis String)이라고 한다. 그중 올바른 괄호 문자열을 VPS(Valid PS)라고 부른다. 예를 들면 "((()))"는 VPS지만 "(()("같은 경우는 그냥 PS이다. 각 주어진 괄호 문자열이 VPS인지 판단해 결과를 YES 혹은 NO로 나타내어라 접근법 1 정석적인 스택 ..
URL : https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 기본적인 스택을 구현하는 문제이다. 조금 이상하게 풀어보고싶다는 이상한 생각이 들어 이상하게 풀어봤다. import re import sys class Stack(object): def __init__(self) -> None: self.stack = [] def push(self,x) -> None: self.stack.append(x) def pop(self) ->..
https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 문제를 파악해보자. 0 또는 양의 정수가 주어졌을때 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내는 문제이다. 제한 사항을 보면 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수..
URL : https://programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 배열 array의 i번째 숫자부터 j번째 숫자까지 고르고 정렬한 후 k번째 수를 구하는 문제이다. 입력 형태는 아래와 같다. 기본적인 solution()함수의 매개변수로 array,commands를 받게되는 것이다. commands안에 각각의 상황에 따른 i,j,k값이 있고, 각 command별로 결과값들을 모아서 리스트로 반환하는 것이다. 아래와 같이 구현하였다 from typing import MutableSequ..
URL : https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 기본적인 정렬 문제이다. 첫번째 줄에 n을 받고 그 다음줄부터 총 n개의 수를 받아서, 정렬하는 문제이다. 버블정렬, 선택정렬, 삽입정렬, 퀵정렬, 파이썬 내장 sort, 숏코딩 총 6가지 방법으로 풀어보았다 from typing import MutableSequence ''' python short coding print(*sorted([int(input()) for _ in range(int..
Hoplin
'CS 지식/Algorithm-Problem Solving 정리' 카테고리의 글 목록