Developing Myself Everyday
SOLID 와 소프트웨어 디자인 패턴

SOLID (객체지향 설계 원칙) SOLID 원칙은 다음과 같은 다섯 가지 원칙의 앞글자를 따서 이름이 지어졌다. Single Responsibility Principle (SRP) - 단일 책임 원칙 Open-Closed Principle (OCP) - 개방-폐쇄 원칙 Liskov Substitution Principle (LSP) - 리스코프 치환 원칙 Interface Segregation Principle (ISP) - 인터페이스 분리 원칙 Dependency Inversion Principle (DIP) - 의존 역전 원칙 이 원칙들은 객체지향 설계를 할 때, 좀 더 유연하고 유지보수하기 쉬운 코드를 작성하기 위해 고안된 원칙들이다. 각각의 원칙은 아래와 같이 설명된다. 단일 책임 원칙(SRP)..

2789번: 블랙잭
백준/브루트포스 2023. 1. 1. 17:10

2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후..

article thumbnail
2563번: 색종이
백준/구현 2023. 1. 1. 16:13

2563번: 색종이 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변 www.acmicpc.net 문제 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다. 입력 첫째 줄에 색종이의 ..

article thumbnail
운영체제(1) - 시작하기

운영체제는 응용 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램이다. 운영체제는 하드웨어와 응용 프로그램 사이에서 다른 응용 프로그램들이 유용한 작업을 할 수 있도록 환경을 제공한다. 다르게 표현하자면, 하드웨어를 감추고 겉으로 다른 프로그램들을 지원해준다고 생각할 수 있다. 이는 프로그램을 사용하는 사람이 편하게 쓸 수 있게 각종 기반 작업을 지원한다는 것으로 이해할 수 있다. 운영체제를 공부해야 하는 이유 사실 이 질문에 대한 대답은 한번이라도 오류 메시지를 접해 보았다면 쉽게 답할 수 있다. 대다수의 오류 메시지들이 운영체제로부터 발생한다. 우리가 작성한 코드가 하드웨어에서 실행되지 못한다면 운영체제는 오류 메시지를 띄워주게 된다. 프로그래밍 문법만 배워서는 해결할 ..

article thumbnail
컴퓨터 구조(3) - 메모리

주기억장치의 종류에는 크게 RAM과 ROM으로 나뉜다. 하지만 우리가 메모리를 말할때는 RAM을 말하는 경우가 많다. RAM (Random Access Memory) RAM은 '임의 접근' 을 할 수 있는 메모리를 말하며 휘발성 저장 장치이다. 비휘발성 저장 장치로는 SSD, CD, USB가 있다. 우리가 컴퓨터를 구매할때 CPU와 GPU를 주로 고려하는데, 그에 몾지않게 RAM의 용량 또한 중요하다. CPU가 실행하고 싶은 프로그램을 RAM으로 가져오게 되는데 이때 RAM의 용량이 적다면 실행 시간이 길어지게 된다. 여러가지 프로그램을 동시에 가져올때도 마찬가지이다. RAM이 클수록 용량이 큰 프로그램을 버벅이지 않게 사용할 수 있다. RAM의 종류 1. DRAM (Dynamic RAM) - 동적 램으..

article thumbnail
H-Index

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=kotlin 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 나의 풀이 이 문제는 filter을 사용해서 간단하게 해결하였다. class Solution { fun solution(citations: IntArray): Int { var answer = 0 for(i in 0..citations.size) { var filter = citations.filter { it >= i } if(filter.size ..

article thumbnail
타겟 넘버

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=kotlin 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 나의 풀이 매우 간단한 dfs 문제이다. 숫자가 담긴 배열을 cnt가 numbers.size가 될때까지 '+' 와 '-'로 나눠서 dfs를 반복 해주면 된다. class Solution { var size = 0 fun solution(numbers: IntArray, target: Int): Int { return dfs(0, 0, numbers, ..

article thumbnail
순열 (Permutation) & 조합 (Combination)

순열이란? 수학에서 순열(Permutation) 또는 치환은 순서가 부여된 임의의 집합을 다른 순서로 뒤섞는 연산이다. 즉, 순열은 정의역과 공역이 같은 일대일 대응이다. n개의 원소의 순서를 뒤섞는 순열의 개수는 n의 계승 n!와 같다. 즉, n 이하의 양의 정수들을 곱한 값이다. 쉽게 말하자면 서로 다른 n개중에서 r개를 선택하는 경우의 수이다. 1. Swap 을 이용한 순열 첫번째는 swap 함수를 만들어서 배열들의 값을 직접 바꾸는 방법이다. 배열의 첫 값부터 순서대로 하나씩 바꾸며 모든 값을 한번씩 swap 한다. depth 를 기준 인덱스로 하여 depth 보다 인덱스가 작은 값들은 그대로 고정하고 depth 보다 인덱스가 큰 값들만 가지고 다시 swap 을 진행한다. 하지만 이 방식은 사전 ..