CS 지식

SOLID 원칙이란? SOLID 법칙이란, 객체지향 프로그래밍 및 설계의 다섯가지 기본 원칙이다. 시간이 지나도 유지 보수 및 확장이 쉬운 시스템을 만들고자 할때 이 원칙들을 함께 적용할 수 있다. SOLID 원칙에는 총 5가지의 원칙이 있으며, 하나씩 알아보자 1. 단일책임의 원칙(SRP, Single Responsibility Principle) 단일 책임 원칙이란, 하나의 클래스(혹은 객체)는 단 하나의 책임만을 가진다 라는것을 가진 원칙이다. '책임'이 많다라는것은, 곧 변경될 여지가 많다는 것과 동일한 의미이다. 또한 책임을 많이 가질수록, 클래스 내부에서 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 높다. 두가지 이상의 기능이 필요한 경우에는, 클래스를 나눠야한다. SRP와 관련..
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 과 같은 경우를 말하는 것이다. 즉, 주어진 정수들에 대해 부호반전을 해준 정수 리스트와 주어..
모듈로 연산? 모듈로 연산은 어떠한 숫자를 다른 숫자로 나눈 나머지를 구하는 연산으로 나머지 연산(mod)라고 한다(프로그래밍 언어에서 %연산자를 의미한ㄷ.). 정수론에서 모듈로 연산이라는것이 있는데, 이는 정수의 합과 곱을 어떤 주어진 수의 나머지에 대해 정의하는 방법이다. 모듈로 연산은 아래 세가지를 충족시킨다고 한다. 나머지는 이 공식에 부합하지 않는다고 한다. (A + B) % C = ((A % C) + (B % C)) % C (A - B) % C = ((A % C) - (B % C)) % C (A * B) % C = ((A % C) * (B % C)) % C 유도해보기 A,B를 각각 위와 같이 정의하고 유도해보면 아래와 같다. 이 원리를 이용해 풀었던 문제이다. https://www.acmicp..
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..
동적 계획법이란? 동적계획법은 Dynamic Programming, DP라고도 불린다. 동적계획법은 하나의 문제를 "단 한번만" 푸는 문제이다. 분할정복과 비슷한 성격을 띄고있다. 단 다른 점이라면, 분할정복같은 경우에는 동일한 문제를 여러번 푼다는 점에 있어서 동적계획법과 차이가 있다. 동적계획법을 사용하는데에 있어 아래 두가지 조건을 만족해야한다. 큰 문제를 작은 문제로 나눌 수 있어야 한다 작은 문제에서 구한 정답이 큰 문제에서도 동일한 정답으로 적용해야한다. 동적계획법은 메모이제이션(Memoization)기법을 사용하면서 값을 구하게 된다. 메모이제이션이란, 이미 구한 답을 잠시 배열에 기록해두고, 나중에 동일한 연산을 할 때 사용한다는 기법이다. 분할정복에서의 비효율성 분할정복법의 비효율성은 대..
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) ->..
Hoplin
'CS 지식' 카테고리의 글 목록