본문 바로가기

CS

(91)
[batch] cron 표현식 https://ko.wikipedia.org/wiki/Cron cron - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. ko.wikipedia.org cron은 유닉스 계열 운영체제의 시간 기반 잡 스케줄러이다. 과거부터 시간 기반 스케줄링을 수행할 때 자주 사용한 유틸리티 프로그램으로, 일정 시간마다 정해진 동작을 수행해야 하는 배치 프로그램을 구현할 때 많이 사용한다. 이렇다 보니 많은 배치 스케줄러들이 cron을 직접 사용하지는 않더라도 일종의 표준처럼 해당 유틸의 시간 표현 방식을 동일하게 사용하는 경우가 많다. 크론 식은 다음 필드를 포함한다. 필드 값 초 0-59, 특문 분 0-59, 특문 시 0-59, 특문 일(day of month) 0~31, 특문 월(month) 1..
[네트워크] HOL(Head Of Line) blocking https://en.wikipedia.org/wiki/Head-of-line_blocking 정의 패킷 라인이 첫번째 패킷에 의해 대기열로 보류될 때 발생하는 성능 저하를 의미한다. 특정 프로토콜이나 기술에 국한된 개념이 아니며, 순서를 보장하는 서비스나 자원의 경합 등 특정 패킷의 대기가 다른 패킷의 움직임을 막는 경우 HOL blocking에 속할 수 있다. 네트워크 스위치 입력 큐에 속한 패킷들이 하나의 출력 큐를 두고 경합하는 과정에서 단 하나의 큐 데이터만 전송되고, 다른 큐의 데이터들은 그만큼 대기하는 비효율이 발생할 수 있다. 만약 경합이 없었다면 모든 첫번째 큐의 데이터가 적절한 출력 포트로 이동하므로 다음 패킷들은 각 큐의 첫번째 패킷에 의한 대기(차단) 없이 다음 턴에 처리될 수 있을 ..
[프로그래머스] 숫자 변환하기 https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 숫자 x가 주어졌을 때, x에 2 또는 3을 곱하거나 n을 더해 y를 만들 수 있는 경우의 수 중 최소 연산 횟수를 구하는 문제이다. 뭔가 동적 계획법을 적용하면 좋을 것처럼 보인다. 하향식 방법 맨 처음에는 하향식 동적 계획법을 적용, 주어진 각각의 연산이 숫자에 대해 수행 가능한 경우, 해당 값들 중 최소값을 선택하여 캐시에 기록하며 처리하는 방식을 고려했다. function solution..
[프로그래머스] 방문 길이 https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr x, y 각각 최소 -5, 최대 5의 좌표를 가지는 좌표 공간에 대해 4 방향(L, R, U, D)으로 움직일 수 있다. 경계를 넘어가는 입력은 무시하며, 이동한 "경로"의 길이를 구하는 것이 이번 문제에서 원하는 답이다. 문제를 풀 때 작성해야 하는 코드는 크게 2가지로 나뉠 것 같다. 격자에서 좌표의 이동을 계산하는 알고리즘 이동한 경로를 기록하는 알고리즘 1번의 경우 단순히 아래와 같이 나타..
[백준] 4948, 베르트랑 공준 https://www.acmicpc.net/problem/4948 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net N 초과 2N 이하 범위의 소수를 선택하는 알고리즘을 작성하는 문제다. n의 범위는 [ 1, 123456 ] 이므로 현재 문제에서 나타나는 숫자의 범위는 1 ~ 246912 ( 2N )으로 한정된다. 브루트 포스 가장 큰 숫자인 246912 기준 제곱근을 씌우면 소수 판별을 위해 496번의 연산을 필요로 한다. 이 수치가 상당히 작다고 생각해서 맨 처음에는 N이 들어올 때마다 각각 연산하여..
[디자인패턴] 메멘토 패턴 설명 캡슐화를 위배하지 않으면서 특정 객체의 상태를 따로 실체화해 둠으로써 나중에 객체의 상태를 복원할 수 있게 한다. 보통 다음과 같은 동작이 요구된다. 상태를 이전으로 되돌릴 수 있음 상태 객체에 대한 접근은 데이터에 대한 원 객체만 가능해야 함 어떤 프로그램은 undo(되감기) 기능을 요구하며, 이를 위해서는 현재 객체의 상태를 따로 분리하여 저장해둬야 한다. 이때 분리된 객체 메멘토가 가지고 있는 상태는 원 객체의 이전 정보를 담고 있으므로 (1) 원 객체만 상태 정보에 접근할 수 있어야 하며, (2) 중간에 악의적인 사용자가 마음대로 이전 상태 정보를 수정하여 반영할 수 있어서는 안 된다. 이를 위해서는 원 객체에서만 메멘토에 접근할 수 있게 하는 구현이 요구된다. 전체적인 메멘토 패턴의 동작 ..
[디자인패턴] 팩토리 패턴들 팩토리 관련 패턴은 대략 3개로 나눌 수 있다. 단순 팩토리 패턴: 객체 생성 로직을 캡슐화하여 클라이언트와의 결합도를 낮춘다. 팩토리 메서드 패턴: 객체 생성에 대한 인터페이스만 정의하고, 구체적인 생성은 서브 클래스에게 위임한다. 추상 팩토리 패턴: 함께 사용되거나 연관된 패밀리 객체 군을 생성하는 인터페이스를 정의한다. 각 객체를 생성하기 위한 인터페이스(메서드 각각)들을 정의할 때 팩토리 메서드나 프로토타입 패턴이 사용될 수 있다. 팩토리 메서드 패턴과 추상 팩토리 패턴의 경우 DIP를 중점적으로 생각하자... 단순 팩토리 패턴 객체를 생성하는 로직을 클라이언트로부터 숨겨 클라이언트와 객체 생성 책임 사이의 결합도를 낮추기 위한 패턴이다. 버튼 클래스의 서브 클래스들 중 하나를 선택하는 상황을 생..
[프로그래머스] 마법의 엘리베이터 https://school.programmers.co.kr/learn/courses/30/lessons/148653 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 마법의 엘리베이터는 0층 이상의 값을 가지며, 한번에 10c (c >= 0) 층(1, 10, 100 ... 위 아래 다 가능)씩 움직일 수 있다. 한번 움직이는데 마법의 돌 하나가 필요할 때 최소 개수로 0층까지 이동하는 것이 이번 문제의 목표다. 1 600 -(4)> 1000 -(1)> 0이기 때문이다. 이때 매 순간마다 10c 자리만 생각해보자. 각 자리에서 올림 등 로직을 전부 처리하고 나..