본문 바로가기

전체 글

(291)
[디자인패턴] Adapter 패턴 설명 특정 클래스의 동작을 클라이언트가 원하는 형태로 변환, 인터페이스를 일치시킨다. 위 그림에서, 클라이언트는 Target 인터페이스 형태로 기존 기술인 Adaptee 클래스의 기능을 사용하고 싶다. 이때 Adaptee을 직접 Target에 맞게 수정하는 것은 매우 고단한 작업이며, 만약 레거시 기술이라면 여러 이유로 수정이 불가능할 수도 있다. 이러한 상황에서 외부 모듈 자체를 수정하는 대신 Adapter 클래스를 구현하여 Adaptee의 인터페이스를 Target의 인터페이스에 적응시킨다. Adapter 패턴은 기존 클래스 Adaptee을 사용하고 싶지만 인터페이스가 맞지 않는 경우, 이 상황에서 Adaptee 자체를 Target 인터페이스에 맞출 수는 없을 때 사용한다. 잘 유지보수 되고 있는 모듈..
[프로그래머스] 숫자 블록 https://school.programmers.co.kr/learn/courses/30/lessons/12923# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 길이가 1,000,000,000(10억) 인 블록 각각에 숫자를 부여하되, 다음 조건을 만족한다. 숫자의 범위는 1 ~ 10,000,000(1천만) 이다. 숫자 N은 2 * N, 3 * N ... 블록에 부여될 수 있으며, 작은 숫자에서 큰 숫자 순서로 블록을 덮어쓸 수 있다. 예를 들어 4번째 블록에 숫자 1이 부여되더라도, 이후 숫자 블록 2에 의해 갱신될 수 있다. 즉, 조건을 만족하는 경..
과제 수행용 글 과제로 인해 vmware을 사용하고 있는데, 버전이 너무 낮아서 그런지 복사 + 붙여넣기 기능이 지원되지 않는다. 다행히도 웹사이트는 사용할 수 있어서 현재 글에 코드를 올리고 복사할 예정이다. 아마 코드 출처: https://seedsecuritylabs.org/Labs_16.04/Software/Buffer_Overflow/ Buffer-Overflow Vulnerability Lab Overview The learning objective of this lab is for students to gain the first-hand experience on buffer-overflow vulnerability by putting what they have learned about the vulnerab..
[디자인패턴] Composite 패턴 설명 클라이언트 입장에서 개별적인 객체와 복합적인 객체를 동일하게 처리할 수 있도록 한다. Composite는 복합 객체로, 내부에 Component 추상 클래스를 상속하는 다른 객체들을 배열 등의 형태로 관리할 수 있다. 클라이언트는 복합 객체와 단일 객체의 구분 없이 동일하게 취급하며, 추상적인 Component라는 단위로 접근하게 된다. 구성 요소 Component: 모든 객체에 대한 인터페이스(추상 클래스)로, 객체들이 공통적으로 가지는 동작인 op 및 복합 객체에게 필요한 Add, Remove 등의 연산을 모두 정의하고 있다. 리프 노드들 입장에서는 Add, Remove 등 연산이 필요하지 않지만, 리스코프 교체 원리를 따라 단일 객체와 복합 개체 모두가 Component라는 인터페이스 아래에서..
[백준] 랜선 자르기 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 발상에 도움이 된 영상: https://www.youtube.com/watch?v=94RC-DsGMLo 문제 설명 기존에 있던 랜선 K개를 동일한 양의 정수 길이 L 단위로 잘라 N개 이상의 동일한 랜선을 얻을 때, L의 최대값을 구하는 문제다. 일단 L의 후보 L'을 찾으면 ∑ ( Ki // L' ) >= N인지 판단할 수 있는데, 해당 조건을 만족하는 경우 L'을 ..
[백준] 계단 오르기 https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 최근에 동적 계획법 문제를 접했는데 개인적으로 너무 어렵다고 느꼈다. 다만 계속 삽질하면서 얻은 경험적 지식 중 하나는 특정 동적 계획법 문제들은 뒤에서 앞 방향으로 식을 반대로 생각하면 쉬울 수 있다는 것이다. 현재 문제는 이러한 경우 중 하나로, 도착지 입장에서 점화식을 전개하는 방식으로 식을 작성했다. N번째 계단에 도달할 수 있는 경우는 크게 2가지가 존재할 수 있다. N-1번째 계단을 밟는 경우 N-..
[오늘의삽질] 도커와 커널: 아주 구 버전의 이미지는 호환되지 않을 수 있다 ubuntu 10.04를 docker 환경에서 돌리려는 시도에 실패하다. 리눅스에 존재했던 Set-UID와 관련된 보안 약점을 실습하는 과제를 하고 있었다. 그런데 최근에 사용되고 있는 wsl2 환경의 ubuntu 환경의 경우 해당 약점에 대한 대응 패치가 이미 진행되었으므로, 상당히 오래된 버전의 리눅스가 필요했다. 이때 현재 컴퓨터에 오래된 리눅스 버전을 설치하는 것은 거부감이 들었기 때문에, docker을 이용하여 격리된 환경에서 구 버전의 운영체제를 이용하여 과제를 진행하는 것을 목표로 docker hub에서 여러 이미지를 찾았다. docker hub 상의 ubuntu 버전 중 가장 오래된 것은 ubuntu 10.04 LTS 버전이었다. 우분투의 버전은 해당 버전이 등장한 년도와 달을 의미한다는 ..
[rust] 숫자 parse 할 때 주의점 백준 문제를 rust 언어로 풀어보려고 하다가, 문자열을 파싱하는 과정에서 계속 오류가 발생했다. let mut buf = String::new(); stdin().read_line(&mut buf).expect("cannot read line!"); let N = buf.parse::().unwrap(); 코드만 보면 별 문제가 없어 보이지만, 위 코드를 통해 숫자를 입력하는 경우 panic이 발생한다. https://doc.rust-lang.org/std/io/trait.BufRead.html#method.read_line 공식 문서에 따르면 Stdin::read_line은 개행 문자('\n' == 0xA == 라인 피드)를 만날 때까지 문자열을 읽어 들인다. 다만 라인을 읽어들일 때 개행 문자까지 ..