howudong의 등록된 링크

키자드에 등록된 총 428개의 포스트를 확인하실 수 있습니다.

Tistory

[소프트웨어공학] 소프트웨어 진화 프로세스와 레거시 시스템

소프트웨어 진화 개발과 진화의 나선형 모델 소프트웨어 공학은 나선형 프로세스로 생각할 수 있음 시스템의 수명동안 요구분석, 설계, 구현, 테스팅이 반복 지난 10년 동안 나선의 반복 사이 시간은 극적으로 줄어듦 경쟁자들의 압박과 사용자들의 피드백에 빠르게 반응해야 함 동일한 회사가 소프트웨어의 수명 동안 책임을 지는 경우에 적용 가능 맞춤식 소프트웨어의 진화 나선형 모델을 따르지 않음 고객이 소프트웨어 지원과 진화를 감당 고객이 시스템 지원과 진화를 담당하는 외부 회사와 별도 계약을 체결 진화 프로세스가 불연속적일 가능성 있음 요구사항과 설계 문서가 한 기업에서 다른 기업으로 전달되지 않을 수 있음 소프트웨어 유지보수 소프트웨어가 개발에서 진화로 매끄럽게 전이되지 않을 때, 사용자에게 인도된 이후의 소프..

Tistory

[소프트웨어공학] 소프트웨어 테스팅 프로세스 여러 기법 및 모델 정리

소프트웨어 테스팅 목적 : 잘 수행되는지 확인 및 프로그램 사용 전 결함 발견 테스팅 방법 : 인위적인 데이터를 이용하여 프로그램 실행 점검 대상 : 오류, 이상, 또는 프로그램의 비기능적 속성에 관한 정보 소프트웨어 테스트 종류 검증 테스팅 시스템의 예상된 사용을 반영하는 테스트 케이스 집합 이용 시스템이 정확하게 수행되는 것을 기대 결함 테스팅 테스트 케이스는 결함을 드러낼 수 있도록 설계 소프트웨어의 동작이 부정확하거나, 명세에 따르지 않게 되는 입력 또는 입력 순서를 찾음 두 접근법 간의 명확한 경계는 없음 프로그램 테스팅의 입출력 모델 및 테스트 과정 시스템이 블랙박스로서 테스트되는 경우로 가정 결함 테스팅의 우선순위 → 집합 \(I_e\)에 속한 입력을 찾는 것 시스템에 있는 문제를 드러내기 ..

Tistory

[소프트웨어공학] 소프트웨어 설계 디자인 패턴 정리 및 구현 이슈 관리

디자인 패턴 패턴 문제와 그 해법의 핵심을 기술한 것 여러 환경에서 재사용될 수 있음 상세한 명세가 아님 객체 지향 소프트웨어 설계에 큰 영향을 줌 디자인 패턴 객체 지향 설계와 연관 공개된 패턴 - 일반성을 제공하기 위한 상속과 다형성 같은 객체 특성에 의존 패턴 적용 일반 원칙 어떤 종류의 소프트웨어 설계에도 똑같이 적용 가능하게 하는 것 디자인 패턴의 네가지 핵심 요소 패턴을 지칭하는 의미있는 이름 패턴이 적용될 수 있는 환경을 설명하는 문제 영역에 대한 서술 설계 해법의 구성요소들에 대한 서술 및 그들의 관계와 책임 구체적 설계 기술이 아닌 다른 방법으로 인스턴스화될 수 있는 설계 해법을 위한 템플릿 패턴을 적용한 결과에 대한 서술 설계자가 특성 상황에 패턴을 사용할 수 있는지를 결정하는데 도움 ..

Tistory

[소프트웨어공학] 소프트웨어 설계와 구현 시 여러 방식과 사용 모델 분석

소프트웨어 설계와 구현 실행 가능한 소프트웨어 시스템이 개발되는 소프트웨어 공학 프로세스 단계 간단한 시스템 소프트웨어 설계와 구현을 의미 다른 모든 소프트웨어 공학 활동들은 이 프로세스에 병합 큰 시스템 많은 소프트웨어 공학 프로세스들 중 하나 설계 고객의 요구사항을 기반으로 소프트웨어 컴포넌트들과 그들 간의 관계를 식별하는 창의적인 활동 구현 설계를 프로그램으로 실현하는 프로세스 설계 방식 때때로 분리된 설계 단계가 있어 설계가 모델링되고 문서화됨 프로그래머의 머리에 있거나 화이트보드나 종이에 개략적으로 스케치 → 항상 프로세스가 있는 것은 아님 설계 시 구현 이슈 설계 문서화를 위해 UML를 사용하는 것 객체 지향 언어로 프로그래밍 → 적절 동적 타입 언어 → 부적절 애자일 방법 사용 설계할 때 대..

Tistory

[소프트웨어공학] 애플리케이션 아키텍처 모델과 시스템(+ 참조 아키텍처)

애플리케이션 아키텍처 개발/도입 이유 비즈니스 또는 조직의 필요를 만족시키기 위해 비즈니스들은 해당 영역에 특화된 공통 애플리케이션 사용 → 이런 공통점으로 인해 아키텍처 도입 애플리케이션 아키텍처 시스템 클래스의 주요 특성 포함 예: 실시간 시스템 - 데이터 수집 시스템 또는 모니터링 시스템 같은 유형의 시스템을 개발 시 공통적인 아키텍처 구조를 재사용 비즈니스 시스템에서 애플리케이션 아키텍처 재사용을 함 애플리케이션 아키텍처 모델 사용법 아키텍처 설계 프로세스의 시작점 개발하는 애플리케이션 유형에 익숙하지 않은 경우에 해당 초기 설계를 일반 애플리케이션 아키텍처에 기반을 두고 시작 추후 개발할 특정 시스템을 위해 설계를 특화 설계 점검표 애플리케이션 시스템을 위한 설계가 일반적인 아키텍처와 일치하는지..

Tistory

[소프트웨어공학] 아키텍처 패턴의 종류 및 구조

패턴과 아키텍처 패턴 패턴 소프트웨어 시스템에 대한 지식을 표현하고 공유하고 재사용하는 방법 객체지향 설계 패턴, 구조 설계를 위한 패턴, 사용성 패턴, 형상관리 패턴 등 아키텍처 패턴 서로 다른 시스템과 환경에서 시도되고 시험된 바람직한 사례를 양식화하고 추상화한 기술 설명 기술과 다이어그램을 섞어서 사용하는 표준 방법으로 기술 가능 패턴에 관련된 상세한 내용 포함 모델 뷰 제어기(MVC) 패턴의 구성 웹 기반 시스템에서 상호 작용 관리의 기반 대부분의 언어 프레임 워크에서 지원 예 : 런타임 시스템 아키텍처 아키텍처 설계의 기본 분리와 독립의 개념 변경에 의해 영향받는 범위를 작게 만듦 MVC 패턴 시스템의 요소들을 분리하여 독립적으로 변경될 수 있도록 함 계층 아키텍처 패턴 분리와 독립을 이루는 또..

Tistory

[소프트웨어공학] 소프트웨어 시스템에서의 아키텍처 설계의 개념 및 사용

아키텍처 설계 소프트웨어 설계 프로세스의 첫단계 시스템의 전체 설계를 이해하는 것 주요 구조 컴포넌트들과 그들 간의 관계 식별 설계와 요구공학 사이의 중요한 연결 결과물 → 아키텍처 모델 시스템이 상호작용하는 컴포넌트들의 집합으로 어떻게 구성되었는지 설명 애자일 프로세스 아키텍처 설계 초기 단계에서 전체 시스템 아키텍처 설계에 초점 맞춤 아키텍처의 점진적 개발은 보통 성공적이지 않음 변화에 대응하여 컴포넌트를 리팩토리항 하는 것이 상대적으로 쉬움 시스템 아키텍처를 리팩토링하는 것은 비용이 많이 듦 아키텍처 변화에 따라 시스템 컴포넌트들은 수정해야함 아키텍처 설계의 현실적 측면 주요 아키텍처 컴포넌트들이 시스템의 상위 수준 특징 반영 → 컴포넌트 식별 필요 이상적으로는 시스템 명세에는 설계 정보가 포함되지..

Tistory

[Git] Git 내부 동작 원리 개념 정리 및 실습을 통한 이해

CLI와 Git 내부의 폴더와 파일을 분석하여 Git 명령어들이 어떻게 동작하는지 살펴본다. Git init 내부 분석 Git Bash에서 임의의 빈 폴더에 git init을 통해 .git을 만든다.(로컬저장소 생성) ls -al .git 를 통해 .git 폴더 내부를 살펴보면 다양한 폴더들이 생성된 것을 확인할 수 있다. ls -al 명령의 각 컬럼의 의미 -rw-r--r-- 1 파일과 권한과 상태를 의미하는 것인데, Git 내부 명령을 이해하는데 중요한 것은 _맨 앞이 ‘-’로 시작하면 파일 ‘d’로 시작하면 폴더*_라는 것 junpyohong 파일 소유자의 아이디 staff 파일이 속한 그룹(파일 소유자가 속한 그룹) 73 파일의 크기, 바이트 표시로 표시 Dec 27 13:36 파일 생성 시간 d..

Tistory

[Git] 자격증명 관리 방법(Mac OS)과 Git 에서의 SSH 키 생성 및 사용

Mac 자격증명(Credential) 관리 계정 정보를 입력 및 삭제하는 방법 SourceTree에서 직접 입력하기 옵션 - 계정에서 사용자 계정 정보를 Remove로 삭제 CLI에서 git Push 명령어 사용 사용자 계정이 없는 상태에서 git push 로그인 정보 입력 후 자격 증면 관리자를 보면 GitHub 정보가 오늘 날짜로 자동으로 추가됨 Mac에서 Git 인증 관리 git config --local credential.helper git config --global credential.helper git config --system credential.helper기본적으로 맥에서 사용자 인증을 관리해 주는 osxkeychain이 git의 인증 관리에도 사용 키체인 접근 이라는 앱이나 소스트리..

Tistory

[자료구조] 그래프 기초 개념과 및 BFS/DFS 분석하고 구현

그래프 객체 간의 연결 관계를 표현하는 자료구조 → 매우 일반적인 자료구조 오일러 문제 모든 다리를 한 번만 건너서 처음 출발했던 장소로 돌아오는 문제 용어 표현 위치 → 정점(node) 다리 → 간선(edge) 오일러 정리 모든 정점에 연결된 간선의 수가 짝수이면 오일러 경로 존재 그래프 정의 수학적 표현 : \(G = (V, E)\) V는 정점(vertex)들의 집합 E는 간선(edge)들의 집합 정점들 간의 관계를 의미 → 정점들과 간선들의 각 유한집합의 자료구조 그래프의 종류 간선의 종류 무방향 간선 : 간선을 통해 양방향으로 갈 수 있음 (A, B) (A, B) = (B, A) 방향 간선 : 한쪽 방향으로만 갈 수 있음 \(\neq\) 그래프 종류 무방향 그래프 방향 그래프 가중치 그래프, 네트..

Tistory

[자료구조] 우선순위 큐 - 힙(Heap)과 연결리스트로 이해,구현 그리고 응용

우선순위 큐 우선순위를 가진 항목들을 저장하는 큐 우선순위큐 ADT 객체 n개의 element형의 우선 순위를 가진 요소들의 모임 연산 create() ::= 우선순위 큐를 생성 init(q) ::= 우선순위 큐 q를 초기화 is_empty(q) ::= 우선순 큐 q가 비어있는지를 검사 is_full(q) ::= 우선순위 큐 q가 가득 찼는가를 검사 insert(q,x) ::= 우선순위 큐 q에 요소 x를 추가 delete(q) : = 우선순위 큐 q로부터 가장 우선순위가 높은 요소를 삭제 및 반환 find(q) ::= 우선순위가 가장 높은 요소를 반환 우선 순위 큐는 2가지로 구분 최소값 우선수위 큐 작을수록 우선순위가 높음 최대값 우선순위 큐 높을수록 우선순위가 높음 우선순위 큐 구현방법 배열로 구현..

Tistory

[네트워크 보안] IPSec 단계, 옵션 개념 및 분석

IPSec VPN의 안전을 위해 사용되는 프로토콜 → IP버전6(IPv6) 필요 VPN : 양 끝단에 안전한 통로를 생성하는 응용체계 특징 암호화, 무결성, 보호 및 인증기능 제공 네트워크 계층에 존재하기 때문에 운영체제의 일부 IPSec을 구현하기 위해선 운영체제에 변화가 일어남 모든 작업이 OS(운영체제)에서 일어나기 때문에 응용프로그램의 변화X ← 가장 중요한 장점(응용프로그램에서 자유로움) IPSec은 2가지 주요한 부분으로 구성 IKE(Internet Key Exchange) 상호인증과 대칭키 공유를 설정해줌 SSL세션 및 접속과 유사하게 2가지 단계가 존재 보안 페이로드 캡슐화 및 인증 헤더(ESP/AH) AH는 무결성만 제공하는 반면 ESP는 암호화 및 IP 패킷의 무결성을 제공 결점 너무 ..

Tistory

[네트워크 보안] SSL 개념 및 프로토콜 단계별 이해

SSL 방대한 인터넷 상거래의 안전을 위해 사용되는 프로토콜 고객이 인터넷 서점에서 책을 구입하는 경우 신용카드를 제공하기 전 자신이 거래하고 있는 사이트가 진짜 그 사이트인지 확인 → 고객은 그 사이트를 인증 But, 인터넷 서점(사이트)쪽에서는 고객의 신원을 알 필요가 없다. 상호인증은 필요없다. 보편적으로 웹브라우징 세션에서 많이 사용 SSL 프로토콜 관련 용어 S = “마스터 이전 비밀”(Pre-master Secret) K = \(h(S,R_A,R_B)\) msgs = “모든 이전의 메시지”를 의미 CLNT = 문자열 SRVR = 문자열 SSL 프로토콜 너무 단순한 유사 SSL 프로토콜 과정 앨리스는 서버인 밥에게 안전한 거래를 원한다고 알림 밥은 자신의 인증서로 응답 인증서의 서명을 확인하여 ..

Tistory

[네트워크 보안] 제로지식증명(ZKP)이란? ( +TCP 인증 프로토콜)

제로지식증명(ZKP) 정보를 노출하지 않고 증명하는것 앨리스가 밥에게 비밀번호를 알고 있다는 것을 증명하려고 한다. 밥에게 비밀번호를 말하지 않고 알고 있다는 것을 증명하는 것이 가능할까? 밥의 동굴(Bob’s Cave) 조건 길은 Q지점에서 두 갈래로 갈린다. R과 S 사이의 벽은 비밀번호를 알고 있다면 넘어갈 수 있다. Alice는 Bob에게 비밀번호를 알리지 않고 비밀번호를 알고 있다는 것을 어떻게 증명해야 하나? 과정 Bob이 보지않는 동안 Alice는 R과 S 중 하나의 길을 선택해서 들어간다. Bob은 Alice에게 R 또는 S 방향으로 나오라고 요구한다. Alice는 Bob이 요구한 방향으로 나온다. 해당 과정을 N번 반복 Alice가 비밀번호를 아는 경우 어느 방향으로 가든 벽을 넘을 수 ..

Tistory

[네트워크 보안] 공개키 인증 프로토콜의 다양한 방식(세션키,PFS,타임스탬프)

공개키 \(C ={M}_{앨리스}\) → 메세지 M을 앨리스의 공개키로 암호화한 것 \(M =[C]_{앨리스}\) → 암호문 C를 복호화해 평문 M으로 만드는 것 \(S =[M]_{앨리스}\) → 앨리스의 개인키로 메세지를 서명한 것 공개키 연산은 누구나 수행할 수 있지만 개인키는 본인만 사용할 수 있다 암호화와 복호화가 상호 역연산인 것처럼 암호화와 서명 또한 역연산 관계 \(\begin{align} \left [ \left\{ M\right\}_{앨리스} \right ]_{앨리스} \\ \left\{ \left [ M \right ]_{앨리스}\right\}_{앨리스} \end{align}\) 공개키 인증 공개키 암호를 사용한 인증 앨리스만이 유일하게 3번째 메세지 R의 응답에 필요한 개인키 연산을 ..

Tistory

[네트워크 보안] 단순 인증 , 대칭키 인증 프로토콜 그림과 함께 이해하기

프로토콜 : 특정 상호 작용을 보장하기 위해 준수되어야 하는 규칙 네트워크 측면 : 연결된 다양한 통신시스템이 준수해야 하는 규칙 보안 프로토콜 : 보안 프로그램에서 준수되어야 하는 통신 규칙 보안 프로토콜이 중요한 이유 네트워크에 관한 공격은 프로토콜에 의해 전달되는 메시지에 의존한다. 네트워크에 관한 공격 : 통상 인증을 목적으로 네트워크를 통해 전송되는 메세지에 대한 보안 문제 대표적인 예 : 재연 공격, 중간자 공격 직접적인 사례 : IPSec, WEP, GSM 보안 프로토콜에서는 공격자가 매우 다양한 기법으로 중간 처리과정에 개입 → 다른 프로토콜보다 더 민감 보안 프로토콜이 정해진 보안 요구수준(효율성, 사용 용이성, 구현 용이성, 융통성) 등을 모두 만족시키기 힘듦 IFF(피아식별) 프로토콜..

Tistory

[자료구조] 힙(Heap)의 개념과 구조, 그리고 힙을 통한 우선순위큐 구현(C)

우선순위 큐란? 우선순위를 가진 항목들을 저장하는 큐 우선순위큐 ADT 객체 n개의 element형의 우선 순위를 가진 요소들의 모임 연산 create() ::= 우선순위 큐를 생성 init(q) ::= 우선순위 큐 q를 초기화 is_empty(q) ::= 우선순 큐 q가 비어있는지를 검사 is_full(q) ::= 우선순위 큐 q가 가득 찼는가를 검사 insert(q,x) ::=** 우선순위 큐 q에 요소 x를 추가 delete(q) : = 우선순위 큐 q로부터 가장 우선순위가 높은 요소를 삭제 및 반환 find(q) ::= 우선순위가 가장 높은 요소를 반환 우선 순위 큐는 2가지로 구분 최소값 우선수위 큐 작을수록 우선순위가 높음 최대값 우선순위 큐 높을수록 우선순위가 높음 우선순위 큐 구현방법 배열..

Tistory

[자료구조] 트리(Tree)의 기본 개념 및 종류, 그림으로 쉽게 알기

트리 계층적인 구조를 나타내는 자료구조 부모 - 자식 관계의 노드들로 구성 트리 용어 노드(node) : 트리의 구성요소 간선(edge) : 노드를 연결하는 관계 루트(root) : 부모가 없는 노드(A) 단말 노드(terminal node) : 자식이 없는 노드( E,F,G,H,I,J ) 비 단말 노드(non-terminal node) : 적어도 하나의 자식을 가지고 있는 노드( A, B, C, D ) 서브 트리(subtree) : 하나의 노드와 그 노드들의 자손들로 이루어진 트리(점선) 자식/부모/형제/조상/자손 노드 : 인간과 동일함 레벨(level) : 트리의 각 층 번호 높이(height): 트리의 최대 레벨(3) 차수(degree) : 노드가 가지고 있는 자식 노드의 개수 트리의 종류 해당 트..

Tistory

[자료구조] 이진 트리 특징과 순회 방식 분석, 구현 및 활용

이진 트리 정의 : 공집합 또는 루트와 왼쪽/오른쪽 서브트리로 구성된 유한집합(서브트리는 이진트리) 모든 노드가 2개의 서브트리를 가지고 있는 트리 서브트리는 공집할 수 있음 특징 각 노드에는 최대 2개까지의 자식 노드가 존재 각 노드의 차수 ≤ 2 → 구현하기가 편리 서브트리간 순서 존재 ( L → R ) 성질 노드의 개수가 n개이면 간선의 개수는 n-1개 높이가 h인 이진 트리인 경우 최소 h개의 노드 최대 \(2^h-1\)개의 노드 n개의 노드를 가지는 이진 트리의 높이 최대 n 최소 \(log_2(n+1)\)(올림) 이진 트리의 분류 포화 이진 트리 트리의 각 레벨에 노드가 꽉 차있는 이진 트리 완전 이진 트리 높이가 h일때, 레벨 1부터 h-1까지는 노드가 모두 채워져 있음 마지막 레벨 h는 왼..

Tistory

[자료구조] 스레드 이진 트리 및 이진 탐색 트리 정리 및 구현

스레드 이진트리 목적 : 이진트리의 NULL 링크를 이용하여 순환 호출 없이도 트리의 노드들을 순회 용어 중위 선행자 : 중위 순회 시에 선행 노드 중위 후속자 : 중위 순회 시에 후속 노드 스레드(thread) : 실을 이용하여 노드들을 순회 순서대로 연결시켜 놓은 것 장점 : 순회를 빠르게 할 수 있음 단점 : 스레드를 설정하기 위해 삽입이나 삭제 함수가 더 많은 일을 해야 함 구성 방법 NULL 링크에 중위 순회할 때 후속 노드(중위 후속자)를 저장시켜놓음 → 이를 스레드 이진트리라고 함 스레드 이진트리 순회 구현 #include #include #include typedef struct TreeNode{ int data; struct TreeNode *left, *right; // 오른쪽 자식 링..

Tistory

[자료구조] 연결리스트로 스택과 큐 구현하고 분석하기(C언어)

연결 리스트 스택 연결된 스택 구조 노드 = 데이터 필드 + 링크 필드 포인터 : top 연산 init, is_empty, is_full, push, pop 장점 크기가 제한되지 않는다. 단점 동적 메모리 할당이나 해제함 → 삽입이나 삭제 시간이 좀 더 걸림 연결 리스트 스택 연산 초기화 함수 top 포인터 값을 NULL로 한다. is_empty top 포인터 값이 NULL(true) → 공백(true) top 포인터 값이 false → 적어도 한 개의 노드가 있음 is_full 동적 메모리 할당받아 새 노드를 사용하므로 힙 공간의 크기만큼 사용 가능 → 많은 메모리 공간 사용 가능 → 포화상태 안됨(false) push(삽입연산) 먼저 동적 메모리 할당으로 새 노드를 만들고 데이터를 넣는다. temp ..

Tistory

[자료구조] 원형리스트와 연결리스트 개념과 구조, 구현과 활용

단순 연결 리스트 가장 첫 노드는 head를 가리킴 마지막 노드의 링크는 NULL로 표시 끝 노드를 찾는 시간 복잡도: O(n) 원형 연결 리스트 마지막 노드의 링크가 첫번째 노드를 가리킴 하나의 노드에서 링크를 따라가면 모든 노드 방문 가능 **모든 노드의 링크가 NULL이 아니다.(head가 NULL인 경우 제외)** 변형된 원형 연결 리스트 head 포인터 하나로 리스트의 처음과 끝을 가장 효율적으로 표현(찾는다) 마지막 노드 : head가 가리킴 첫번째 노드 : head → link가 가리킴 cf) 노드가 1개일 때 : head → link가 가리키는게 head 가장 처음에 노드 삽입하는 경우 원형 연결 리스트가 NULL(노드 0개)일 경우 head = node; head를 NULL에서 새로운 노..

Tistory

[C++] 백준 12933 - 오리

문제 이해 단계 문제 오리의 울음 소리는 "quack"이다. 올바른 오리의 울음 소리는 울음 소리를 한 번 또는 그 이상 연속해서 내는 것이다. 예를 들어, "quack", "quackquackquackquack", "quackquack"는 올바른 오리의 울음 소리이다. 영선이의 방에는 오리가 있는데, 문제를 너무 열심히 풀다가 몇 마리의 오리가 있는지 까먹었다. 갑자기 영선이의 방에 있는 오리가 울기 시작했고, 이 울음소리는 섞이기 시작했다. 영선이는 일단 울음소리를 녹음했고, 나중에 들어보면서 총 몇 마리의 오리가 있는지 구해보려고 한다. 녹음한 소리는 문자열로 나타낼 수 있는데, 한 문자는 한 오리가 낸 소리이다. 오리의 울음 소리는 연속될 필요는 없지만, 순서는 "quack"이어야 한다. "quq..

Tistory

[Git] CLI 환경에서 reset, merge, rebase 사용하기

CLI를 이용한 빨리 감기 병합 branch1 브랜치가 master 브랜치보다 최신 커밋을 가리키고 있다. 그리고 두 브랜치는 같은 작업의 흐름에 있다. master 브랜치로 checkout 후 master 브랜치와 branch1 브랜치를 merge(병합)하면? 새로운 커밋이 생성되지않고 master 브랜치가 빨리감기 된다. HEAD가 branch1 이고 main이 이전 커밋인 이런 커밋로그가 있다. main 브랜치로 체크아웃하고 커밋을 해보겠다. 중간에보면 Fast-forward라는 문구와 함께 branch1이 가리키던 커밋을 함께 가리키는 것을 확인할 수 있다. origin/HEAD는 변하지 않았는데 아직 원격저장소에 Push 해주지 않았기 때문이다. 빨리감기(fast-forward) 상황에서 reb..

Tistory

[Git] 브랜치(Branch)와 체크아웃(Checkout) 사용 전략 및 CLI 명령어 정리

브랜치 정의 : 논리적으로는 어떤 커밋과 그 조상들의 묶음 Actually, 단순히 커밋 객체 하나를 가리킴 커밋을 하면 커밋 객체가 생긴다. 커밋 객체 = 부모 커밋에 대한 참조 + 실제 커밋을 구성하는 파일 객체 브랜치 사용 시기 새로운 기능 추가 가장 대표적으로 브랜치를 사용하는 경우 master 브랜치는 보통 안정적인 버전의 프로젝트가 저장되어 있음 → 새로운 기능을 추가할때는 master 브랜치로부터 브랜치를 생성 버그 수정 버그 발생시 master 브랜치로부터 새로운 브랜치 생성 이때 브랜치 이름은 hotFix 또는 bugFix 사용 버그가 다 고쳐지면 master 브랜치에 병합 병합과 리베이스 테스트 병합이나 리베이스는 까다로운 작업 → 임시 브랜치를 만들어 여러 테스트 진행 이전 코드 개선..

Tistory

[Git] CLI 기본 개념 및 기본 명령어 사용 정리

GUI 환경 대신 굳이 CLI를 사용하는 이유? GUI 프로그램은 CLI 기능 중 자주 쓰는 기능만 모아서 쓰기 편리하게 만든 것 GUI는 Git의 모든 기능을 100% 사용 할 수 없다. → Git을 더욱 잘 활용하기 위해 CLI 환경에서 Git을 사용해야 한다. Git 용어 워킹트리(Working Tree) : 사용자가 파일과 하위 폴더를 만들과 작업 결과물을 저장하는 곳 작업 디렉토리, 작업 폴더가 같은 뜻으로 사용 커밋을 체크아웃하면 생성되는 파일과 디렉토리(공식문서) 작업 폴더에서 [.git]폴더(로컬저장소)를 뺀 나머지 부분 작업 폴더 : 워킹트리 + 로컬저장소 로컬 저장소 : [.git] 폴더** 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장 원격 저장소 : 로컬 저장소를 업..

Tistory

[Unity 3D] #8 SphereCastAll을 이용한 타격포인트 표시 및 낙뢰 구현 - Avoid Chess

이 글은 포스팅 #6 과 포스팅 #7과 연결된 마지막 포스팅이다. 광폭화패턴에서 플레이어를 실질적으로 공격하는 액션이다. 구현 목표 일정 시간마다 플레이어가 있는 곳에 낙뢰를 떨어뜨린다. 낙뢰를 떨어뜨리기 전에 그 포인트에 낙뢰의 범위만큼 빨간색으로 경고를 준다. 그리고 1초 후 그 포인트에 번개를 떨어뜨린다. 이러한 액션을 보스가 죽을 때까지 반복한다. 구현 과정 1. 낙뢰 이펙트 세팅 스크립트 작업에 들어가기 앞서 낙뢰처럼 보이기 위한 적절한 이펙트를 찾고 파티클 시스템을 설정해야한다. 해당 파티클이 적당해보인다. 근데 너무 재생시간이 짧아서 좀 더 길게 늘려줬다. Duration과 StartLifeTime을 2배로 늘려주면 재생시간만 두배로 늘어나게 된다. 색이 너무 연하거나 마음에 안드는 경우에는..

Tistory

[Unity 3D] #7 Directional Light 컴포넌트를 활용한 화면 구현 - Avoid Chess

이번에 할 구현은 저번 #6에 이은 동작에 관한 구현이다. #6 포스팅은 간단하게 빨간볼을 크게 키운뒤 위로 쏘는 액션을 구현한 것이다. 자세한 것은 밑의 링크를 참고하길 바란다. https://howudong.tistory.com/109 [Unity 3D] #6 애니메이션 상태 체크를 활용한 보스 스킬 구현 - Avoid Chess 스크립트 상에서 현재 애니메이션 상태를 받아오는 방법으로 가장 대표적인 것은 Animator 컴포넌트의 GetCurrentAnimatorStateInfo를 이용하는 방법이다. 여기서 가장 많이 보편적으로 사용하는 함수를 howudong.tistory.com 구현 목표 #6 포스팅에서 만들어뒀던 빨간볼이 하늘로 쏴지면 하늘 전체가 먹구름으로 가득차듯이 날씨가 어두워지는 것을 ..

Tistory

[Unity 3D] #6 애니메이션 상태 체크를 활용한 보스 스킬 구현 - Avoid Chess

스크립트 상에서 현재 애니메이션 상태를 받아오는 방법으로 가장 대표적인 것은 Animator 컴포넌트의 GetCurrentAnimatorStateInfo를 이용하는 방법이다. 여기서 가장 많이 보편적으로 사용하는 함수를 설명하겠다. Animator.GetCurrentAnimatorStateInfo(0) 현재 재생중인 애니메이션을 의미 Animator.GetCurrentAnimatorStateInfo(0).IsName(String) 현재 재생중인 애니메이션이 String인가? (맞으면 true 아니면 false) Animator.GetCurrentAnimatorStateInfo(0).normalizedTime 현재 재생중인 애니메이션의 진행 정도를 의미한다. (1이면 해당 애니메이션의 재생이 끝났다는 의미..

Tistory

[C++] 백준 18427 - 함께 블록 쌓기

문제 이해 단계 문제 1번부터 N번까지의 학생들은 각각 블록들을 가지고 있다. 학생마다 최대 M개의 블록을 가지고 있을 수 있으며, 한 명의 학생이 가지고 있는 모든 블록들의 높이는 서로 다르다. 이 때 1번부터 N번까지의 학생들이 가진 블록을 차례대로 사용하여 바닥에서부터 쌓아올려 하나의 탑을 만들고자 한다. 단, 어떤 학생의 블록은 사용하지 않아도 되며 한 학생당 최대 1개의 블록만을 사용할 수 있다. 1번부터 N번까지의 학생들이 가지고 있는 블록들에 대한 정보가 주어졌을 때, 높이가 정확히 H인 탑을 만들 수 있는 경우의 수를 계산하는 프로그램을 작성하시오. 예를 들어 N=3, M=3, H=5일 때, 각 학생마다 가지고 있는 블록들의 높이가 다음과 같다고 가정하자. 1번 학생: 2, 3, 5 2번 ..

Tistory

[Git] SourceTree로 알아보는 Reset,Revert 그리고 Stash 개념

Reset(되돌리기) 현재 브랜치의 최신 상태를 이전 커밋(원하는 커밋)으로 되돌리는 기능 3가지 모드 존재 Hard : 모든 작업 내 변경 사항을 버린다.(변경 사항을 다 삭제) Mixed : 원하는 커밋으로 되돌아가지만, 변경사항은 스테이지 아래에 둠 Soft : 원하는 커밋으로 되돌아가지만, 변경사항은 스테이지 위에 둠 Sourcetree Hard Reset 실습 add featB 커밋으로 되돌리기 위해 Reset 버튼을 클릭 3가지 모드 중 Hard 선택 로컬저장소는 적용됐지만 원격저장소 origin에는 아직 적용되지 않음 히스토리를 수정하는 작업이기 때문에 강제푸시를 사용해야한다. 따라서 ForcePush를 체크한다. 정상적으로 원격저장소인 origin에도 적용된 것을 확인할 수 있다. Reve..

Tistory

배낭 문제(KnapSack Problem) 그림으로 쉽게 이해하기

배낭 알고리즘이란? 배낭 문제(Knapsack)는 n개의 물건과 배낭 있을 때, 각 물건에는 가치와 무게가 존재한다. 또한 각 물건은 1개씩만 있다. 배낭에는 담을 수 있는 최대 용량이 존재한다. 이러한 조건일 때, 배낭의 최대 용량을 초과하지 않으면서 배낭에 담을 수 있는 최대 가치의 합을 찾는 문제이다. 해당 그림은 배낭 문제의 예시이다. 지금부터 알고리즘을 설명할 때 해당 예시를 가지고 계속 설명하겠다. 0-1 KnapSack Problem 배낭 문제는 물건을 쪼갤 수 있는 Fraction Knaspack Problem과 물건을 쪼갤 수 없는 0-1 knapSack Problem으로 나뉜다. 이 글에서 설명하고자 하는 것은 0-1 KanpSack Problem이다. 대표적인 DP(Dynamic Pr..

Tistory

[C++] 백준 14719 - 빗물

문제 이해 단계 문제 2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다. 비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까? 입력 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다. 따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다. 출력 2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라. 빗물이 전혀 고이지 않을 경우 0을 출력하여라. 예제 입력 1 4 4 3 0 1 4 예제 출력 1 5 예제 입력 2 4 8 3..

Tistory

[C++] 백준 15724 - 주지수

문제 이해 단계 문제 네모 왕국의 왕인 진경대왕은 왕국의 영토를 편하게 통치하기 위해서 1X1의 단위 구역을 여러 개 묶어서 하나의 거대 행정구역인 주지수(州地數, 마을의 땅을 셈)를 만들 예정이다. 진경대왕은 주지수를 만들기 위해서 일정한 직사각형 범위 내에 살고 있는 사람 수를 참고 자료로 쓰고 싶어한다. 진경대왕은 굉장히 근엄한 왕이기 때문에 당신에게 4개의 숫자로 직사각형 범위를 알려줄 것이다. 예를 들어, 위와 같이 사람이 살고 있다고 가정할 때 의 직사각형 범위의 사람 수를 알고 싶다면 진경대왕은 네 개의 정수 1 1 3 2를 부를 것이다. 마찬가지로 는 1 1 1 4, 은 1 1 4 4가 될 것이다. 진경대왕을 위하여 이 참고 자료를 만들어내는 프로그램을 작성해보자. 입력 첫째 줄에 영토의 ..

Tistory

[Git] Amend 와 Cherry-Pick 이해하고 SourceTree에서 사용해보기(MAC OS)

Amend 가장 최근에 올린 커밋을 수정하는 명령어 로컬 저장소까지만 Push했을때와 원격저장소까지 Push했을때까지 방법이 다름 SourceTree 로컬 저장소까지만 Push 했을때 README.md에 “8.어멘드 추가”라는 텍스트를 추가해서 커밋메세지 없이 로컬저장소까지 커밋했다. 이를 다시 새로운 커밋로그를 만들지 않고 “8.어멘드 추가”를 “8.add amend”로 바꾸고 커밋 메세지에 “어멘드 추가”를 넣고 싶다. 이때 amend를 사용할 수 있다. 방법은 간단하다. 일반적인 커밋과 마찬가지로 README.md에서 텍스트를 수정해준 뒤 커밋메세지를 추가해준다. 이후 커밋 이전에 Commit Options에 Amend last Commit을 눌러준다. 그러면 확인 문구가 뜨는데 확인을 누르면 커밋..

Tistory

[Unity 3D] #5 오브젝트 중심 원형 배치 및 회피성 타겟 추적 시스템 구현 - Avoid Chess

구현 목표 원형으로 보스 위에 몇개의 매직볼이 생긴다. 이 매직 볼은 두 가지 종류가 있는데 파란색과 빨간색이다. 파란색 -> 느리지만 플레이어를 추적 빨간색 -> 빠르지만 플레이어 방향으로 일직선 공격 이를 구현해보자 구현 과정 1. Magic Ball 오브젝트 설정 2가지 MagicBall에 어울릴만한 오브젝트를 선별했다. 일단 크기를 조절하기 위해서 Scene에서 크기를 확인해봤다. 너무 크다. 그래서 Scale을 줄이고자 한다. 그런데 Scale을 아무리 건드려도 줄어들지 않을 것이다. 왜냐하면 해당 오브젝트는 파티클 시스템이기 때문에 다른 설정을 해줘야한다. 이펙트에 파티클 시스템 컴포넌트를 보면 안에 Scaling Mode가 있다. 여기서 Hierarchy로 바꿔주고 스케일을 다시 조정해주면 ..

Tistory

[Git] 소스트리(SourceTree) 포크(Fork) 및 원본 저장소와 연동하기

Fork의 개념 원본저장소를 fork(복제)한다는 것은 독립된 원격저장소를 만든다는 의미 fork한 시점 이후의 원본 저장소의 히스토리는 알 수 없다. 원격저장소에서 원본저장소의 히스토리를 함께 보고싶다면? → 리모트 추가(Add remote) SourceTree Fork 및 리모트 추가 방법 1. Fork 원하는 저장소로 가서 Fork 버튼 클릭 저장소 이름과 여러가지 설정들이 있는데 Copy the main branch only를 선택하면 main 브랜치만 fork해온다. Create fork를 누르면 아래와 같이 개인 저장소로 가져와진다. 이렇게하고 code를 누르면 주소가 뜨는데 이걸 복사해서 Source Tree로 돌아간다. SourceTree에서 원격 → URL에서 복제 클릭 아까 복사했뒀던 ..

Tistory

[Git] Branch(브랜치) vs Fork(포크) (with. Pull Request)

Pull Request(풀 리퀘스트)로 보는 차이 Pull Request? 원본 저장소에 병합을 요청하는 것(권한이 없어도 가능) base:master : 병합된 커밋이 들어갈 브랜치를 정하는 선택박스 compare:JP-test : 병합의 대상, 즉 base 브랜치에 반영시키고 싶은 브랜치 Able to merge : 두 브랜치가 충돌 없이 병합될 수 있다는 뜻. 만약 충돌이 나면 빨간색으로 Conflict 표시 풀 리퀘스트 제목 : 동료 개발자가 한 눈에 이해하기 쉬운 제목을 적어야함 풀 리퀘스트 내용 : 동료 개발자가 코드를 이해하는데 도움이 되는 설명, 스크린샷 첨부 및 테스트 방법 서술 Reviewers: 저장소에 협력자가 여러명이라면 해당 요청을 받는 사람을 지정 가능. 보통 기능 연관자 지정..

Tistory

[Git] 병합(Merge)과 충돌(Conflict) 개념 및 소스트리 충돌해결

Git 병합(merge) 개념 및 차이 소스트리 충돌 해결 병합(merge) : 두 버전의 합집합을 구하는 것 병합 커밋(Merge Commit) 새로운 상태가 나오므로 새로운 커밋이 생긴다. 빨리 감기(Fast-forward) 합친 결과물이 뒤에 있는 커밋과 같다. → 새로 상태를 만들어줄 필요가 없음 충돌(Conflict) 같은 구간에 다른 커밋이 발생했을 경우 충돌 발생 두 병합의 차이 및 충돌 발생 초기 상태가 아래와 같이 존재할 때 이를 이용하여 두 병합의 차이를 알아보자. 1. Master 브랜치와 A 브랜치 합치기 새로운 커밋이 생성되지 않고 A 브랜치와 master 브랜치가 동시에 커밋5를 가리킴 → 빨리 감기(Fast-forward) 둘 다 커밋5를 가리키고 있으면 A 브랜치를 삭제해도 ..

Tistory

[Git] 브랜치 개념 및 원리

브랜치 : 특정 기준에서 줄기를 나누어 작업할 수 있는 기능 브랜치 이동 원리 master / 포인터(Pointer) / HEAD 꼬리표 이해 master : Git에서 제공하는 기본적인 브랜치 첫번째 커밋을 하면 자동으로 ‘master’ 라는 이름의 브랜치가 커밋을 가리킴(Point) Pointer : 물리적인 길이 아닌 그저 가리키는 것 새로 커밋을 할 때마다 브랜치의 포인터가 최신 커밋을 가리킴 물리적인 것이 아니기 때문에 커밋을 가리키는 것만으로도 분기를 만들 수 있음 프로젝트를 통째로 복사할 필요 없음 → Git은 가볍고 빠름 HEAD : 브랜치 혹은 커밋을 가리키는 특수한 포인터 해당 브랜치 상태로 이동할 수 있음 → 타임머신 같은 역할

Tistory

[Git] Git 파일 버전 관리 원리

add : 하나의 버전을 만들기 위해 변경사항을 선택하는 과정 commit : 선택한 변경사항을 하나로 묶어 버전으로 만든 것 변경사항만 부분적으로 저장하는 것이 아닌 변경된 파일 전체를 저장 → Snapshot Snapshot vs Delta Delta : 바뀐 내용만을 저장 SVN(SubVersion)에서 사용하던 방식 Snapshot : 바뀐 내용뿐만 아니라 전체 코드 저장 Git이 대중화된 이유 → 더 빠르기 때문 why? 버전을 보여줄 때의 차이점 때문 Delta 방식 : 파일이 만들어졌던 맨 처음까지 거슬러 올라가며 바뀐 점을 모두 반영하는 계산을 해야함 SnapShot 방식 : 이미 전체 파일이 저장되어 있기 때문에 앞 커밋과 비교하는 연산 한번만 하면 됨 Git으로 관리하는 파일의 4가지 ..

Tistory

[유니티 3D] #4 텔레포트 구현 및 애니메이팅 - Avoid Chess Project

구현 목표 비숍 보스에 텔레포트 패턴을 추가하려고 한다. 텔레포트 패턴은 뿅하고 사라진 후 플레이어의 머리 위에서 나타나는 패턴이다. 구현을 2가지 항목으로 세분화 하였다. 1. 텔레포트 액션 애니메이팅 보스의 텔레포트 애니메이션을 제작하고, 이펙트를 추가하여 이동할 때 텔레포트 하는 느낌이 나도록 할 것이다. 2. 텔레포트 스크립트 구현 만든 애니메이션을 토대로 코드를 작성하여 실제로 보스에게 패턴을 적용시킨다. 구현 과정 1. 텔레포트 애니메이션 만들기 우선 Bishop 프리팹을 이동해서 Create New Clip으로 Bishop_Teleport라는 이름으로 새로운 애니메이션을 만들어준다. 간단하게 스케일 조정으로 텔레포트 효과를 만들었다. Animation에서 녹화버튼을 누르고 원하는 시간대에 모..

Tistory

Git 원격저장소(Repository) 생성 입력(옵션) 항목 정리

1. Repository name : 저장소 이름(필수) 작업할 프로그램의 이름을 입력 이름에 따라 URL이 결정됨 2. Description : 저장소 간단 설명 저장소 이름에 대한 간단 설명 3. Public / Private : 공개 / 비공개 설정(필수) Public : 저장소를 공개해서 누구나 코드를 볼 수 있게 함 Private : 등록된 사람만 볼 수 있도록 함. 비공개 저장소는 3인 이하일때만 무료 4. Initialize with a README : README로 첫 내용 설정 빈 저장소가 아닌 README.md 파일이 담김 저장소가 생성됨 [README.md 저장소든 폴더든 코드로 공간을 만들 때에 그 설명을 기록하는 곳 보통 저장소에 대한 설명,설치 방법, 저장소에 기여한 사람 등 다..

Tistory

[C++] 백준 2138 - 전구와 스위치

문제 이해 단계 문제 N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 < i < N)번 스위치를 누르면 i-1, i, i+1의 세 개의 전구의 상태가 바뀐다. 즉, 꺼져 있는 전구는 켜지고, 켜져 있는 전구는 꺼지게 된다. 1번 스위치를 눌렀을 경우에는 1, 2번 전구의 상태가 바뀌고, N번 스위치를 눌렀을 경우에는 N-1, N번 전구의 상태가 바뀐다. N개의 전구들의 현재 상태와 우리가 만들고자 하는 상태가 주어졌을 때, 그 상태를 만들기 위해 스위치를 최소 몇 번 누르면 되는지 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 전구들의 현재 상태를 나타내는 숫자 N개..

Tistory

[네트워크 보안] 블록 암호 및 운용방식(ECB,CBC,CTR) 정리

블록암호란? - 기밀성 있는 정보를 고정된 크기의 블록단위로 구성하여 암호화 작업을 하는 대칭키 암호 시스템 - 운용 방식에는 크게 ECB, CBC, CTR 세가지 운용 방식이 있다. ECB(Electronic Code Book) 암호화 작업을 하려는 메세지를 여러 블록에 나누어 순차적으로 각각 암호화 하는 방식(가장 간단한 구조) 모든 블록이 같은 암호화 키 사용 → 한 블록만 해석되면 나머지 블록도 해석 → 보안에 취약(대표적인 공격 : 복사/붙여넣기) 각 블록이 독립적으로 동작 → 한 블록의 에러가 다른 블록에 영향x 복호화 후 평문을 알기 위해선 Padding 필요 ← 암호문이 블록의 배수가 되기 때문 CBC(Cipher Block Chain) 평문의 각 블록은 XOR 연산을 통해 이전 암호문과 ..

Tistory

[네트워크 보안] DES3 개념 및 암/복호화 구현(Python)

DES3의 개념 - DES의 단점인 키 길이가 충분하지 않다는 점을 보완하기 위해 나온 모델 - 3개의 DES키를 이용한다는 의미 3DES는 DES의 단점을 발전형이기 때문에 해당 글에서는 DES를 알고 있다는 가정 하에 설명하고 있다. 그리고 코드 또한 DES에서 구현했던 것과 똑같이 사용하기 때문에 부연설명을 하진 않았다. 그러므로 아래 링크로 들어가서 DES에 관해 먼저 안 뒤에 이 글을 읽기 바란다. https://howudong.tistory.com/90 [네트워크 보안] DES 개념 및 암/복호화 구현(Python) DES의 개념 - 64bit 평문을 64bit 암호문으로 암호화 하는 대표적인 비밀키 방식의 대칭 암호 알고리즘 - 암호화/복호화 할때 쓰는 비밀키가 동일함 DES 암호화 방식 평..

Tistory

[네트워크 보안] DES 개념 및 암/복호화 구현(Python)

DES의 개념 - 64bit 평문을 64bit 암호문으로 암호화 하는 대표적인 비밀키 방식의 대칭 암호 알고리즘 - 암호화/복호화 할때 쓰는 비밀키가 동일함 DES 암호화 방식 평문을 64비트로 나눠 56비트의 키로 다시 64비트의 암호문을 만들어내는 알고리즘 DES는 Feistel Cipher 방식으로 암호화를 한다. Feistel Cipher 방식이란 데이터를 좌 우로 나누어 교대로 비선형 변환을 적용하는 구조이다. 장점으로는 누군가 키를 알아내도 원래의 함수를 알아내지 못해 보안성이 좋다. 구현 DES.py from Crypto.Cipher import DES from Crypto.Hash import SHA256 as SHA class myDES(): # DES 초기화 def __init__(se..

Tistory

[네트워크 보안] RSA 개념 및 암/복호화 구현

RSA의 개념 - 공개키 암호 시스템의 하나로, 공개키와 비밀키 두가지의 키를 사용한다. - 전자서명 기능을 요구하는 전자 상거래 등 광범위하게 사용됨 RSA 암호화 방식 공개키 : 모두에게 알려져있으며 암호화하는데 사용 비밀키 : 단 한 사람만 가지고 있고 해독할때 사용 -> 누구나 메세지를 암호화 할 수 있지만 해독할 수 있는 사람은 개인키를 지닌 사람뿐 구현 import socketserver from os.path import exists from Crypto import Random from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 import base64 HOST = '' PORT = 3333 # 들어오는 요청을 처리하..

Tistory

[자료구조] 덱 응용 : Work-Steal(A-steal) 알고리즘 구현

구현 사항 - 각 프로세서들이 각자의 queue를 가지고 작업을 수행 -queue 안에는 순차적으로 실행되어야 하는 Job이 존재 - 동시에 모든 큐를 진행해서 Job을 하나씩 처리한다. - 자신의 큐가 비어있으면 다른 큐에서 Job을 뺏어 처리한다. 구현 방식 큐라고는 하지만 처리하는 일은 앞에서 하고 뺏길 때 뺏기는 큐에서는 뒤에서 뺏기기 때문에 앞과 뒤에서 둘다 요소를 뺄 수 있는 덱을 이용해야 한다. 덱을 이용해서 큐잉 모델 형식으로 구현을 하면 된다고 생각하고 구현하였다. 구현 #include #include #define MAX_DEQUE 100 int total = 0; typedef struct{ char* data[MAX_DEQUE]; int front,rear; }Deque; void ..

Tistory

[자료구조] 배열리스트(ArrayList), 단순 연결리스트(LinkedList) 구현

리스트 리스트의 항목들은 순서 또는 위치를 가진다. cf) 집합 : 각 항목간에 순서의 개념x ADT 객체 : n개의 element형으로 구성된 순서 있는 모임 연산: insert(list, pos, item) ::= pos 위치에 요소를 추가 insert_last(list, item) ::= 맨 끝에 요소를 추가 insert_first(list item) ::= 맨 처음에 요소를 추가 delete(list, pos) ::= pos 위치의 요소를 제거 clear(list) ::= 리스트의 모든 요소 제거 get_entry(list, pos) ::= pos 위치의 요소를 반환 get_length(list) ::= 리스트의 길이를 구한다. is_empty(list) ::= 리스트가 비었는지 검사 is_ful..

Tistory

[자료구조] 큐(Queue)와 덱(Deque)

큐 FIFO(First In First Out) : 먼저 들어온 데이터가 먼저 나가는 자료구조 동작 삽입(enqueue) : 큐의 후단(rear) 삭제(dequeue) : 큐의 전단(front) ADT 객체 : 0 개 이상의 요소들로 구성된 선형 리스트 연산 create(max_size) ::= 최대 크기가 max_size인 공백큐로 생성한다. init() ::= 큐를 초기화한다. is_empty() ::= 큐가 비어있는지 검사한다. is_full() ::= 큐가 가득 찼는가를 검사한다. enqueue(e) ::= 큐의 뒤에 요소를 추가한다 dequeue() ::= 큐의 앞에 있는 요소를 반환한 다음 삭제한다. peek() ::= 큐에서 삭제하지 않고 앞에 있는 요소를 반환한다. 큐의 활용 은행에서의 대..

Tistory

[자료구조] 스택 개념 및 응용

스택 특징 Last in First Out(LIFO) → 가장 최근에 들어온 데이터가 가장 먼저 나감 입력의 역순 출력이 필요한 이유 에디터에서 되돌리기 기능 함수호출에서 복귀주소 기능 ADT 객체 : 0개 이상의 원소를 가지는 유한 리스트 연산 : create(size) ::= 최대 크기가 size인 빈 스택을 생성 is_empty(s) ::= 스택 s가 비어있는지를 검사 is_full(s) ::= 스택 s가 가득 찼는가를 검사 push(s,x) ::= 스택 s의 맨 위에 요소 x를 추가 pop(s) ::= 스택 s의 맨 위에 있는 요소를 삭제 peek(s) ::= 스택 s의 맨 위에 있는 요소를 삭제하지 않고 반환 구현 배열을 이용한 스택 1차원 배열 stack[MAX_STACK_SIZE] 사용 스택..

Tistory

[자료구조] 배열,구조체,포인터 관계 및 정리

배열 쌍의 집합 각 항목의 값은 인덱스 번호로 위치가 계산되어 참조 ****직접 접근 방식, 접근 시간 복잡도 : O(1)**** ADT 객체 : < Index, element> 쌍의 집합 연산 create(size) ::= size개의 요소를 저장할 수 있는 배열 생성 get(A,i) ::= 배열 A의 i번째 요소 반혼 set(A,i,v) ::= 배열 A의 i번째 위치에 값 v 저장 1차원 배열의 주소 가장 첫번째 인덱스 **base** 인덱스를 n이라고 했을 때 arr[n] = **base + nsizeof(자료형)***** ex) int A[6] A[0] : base A[2] : base + 2*sizeof(int) 2차원 배열의 주소 현재 사용하는 것은 행우선 배열(row-major order a..

Tistory

[자료구조] 재귀함수(순환구조)

순환 개념 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법 정의 자체가 순환적으로 되어 있는 경우 적합 프로그램에서 되풀이 해결방법 순환(recursion) 순환적인 문제에서는 자연스러움 **********함수 호출에 오버헤드 발생 가능성********** 반복(iteration) 수행속도가 빠름 ********순환적인 문제에 관해서는 프로그램 작성이 어려워질수도 있음******** 팩토리얼 순환(Recursive) 구현 int factorial_recur(int x) { if(x == 1) return 1; // 순환 비호출 부분 return x*factorial_recur(x-1); // 순환 호출 부분 } 반복(Iter) 방식 구현 int factorial_iter(..

Tistory

[자료구조] 알고리즘 성능 분석 기법

성능 분석 기법 수행 시간 측정 - 두 개의 알고리즘의 실제 수행 시간을 측정하고 비교 가정 : 동일한 하드웨어 사용 복잡도 분석 공간 복잡도 : 수행 시 필요로 하는 메모리 공간 분석 시간 복잡도 분석 : 직접 구현하지 않고 수행 시간 분석 ← 수행하는 연산의 횟수를 측정하여 비교 수행시간 측정 - clock 함수 #include #include #include int main(){ clock_t start,end; double duration = 0; start = clock(); // clock() 현재 시간을 반환 // 코드 실행 // ... // 코드 종료 end = clock(); duration = (double)(end-start)/CLOCKS_PER_SEC; // 초 단위 환산 print..

Tistory

[자료구조] 자료구조 및 추상화 개념

자료구조와 알고리즘 자료구조 : 컴퓨터에서 자료를 정리하고 조직화하는 다양한 구조 알고리즘 : 컴퓨터에서 문제를 해결하기 위한 절차적 단계 프로그램 = 자료구조 + 알고리즘 알고리즘의 조건 입력(Input) : 0개 이상의 입력이 존재해야 한다. 출력(Output) : 1개 이상의 출력이 존재해야 한다. 명백성(Definiteness) : 각 명령어의 의미는 모호하지 않고 명확해야 한다. 유한성(Finiteness) : 한정된 수의 단계 후에는 반드시 종료되어야 한다. 유효성(Effectiveness) : 각 명령어들은 실행 가능한 연산이어야 한다. 알고리즘 기술 방법 자연어 장점 : 읽기 쉽다. 단점 : 의미 전달이 모호하다. 흐름도(flow chart) 장점 : 직관적이고 이해하기 쉽다 단점 : 알고..

Tistory

[소프트웨어공학] 동작 모델과 모델 주도 아키텍처

동작 모델 시스템이 실행될 때의 동적 행동에 대한 모델 시스템이 환경 자극에 반응할 때, 무엇이 일어나는지 또는 일어나도록 의도했는지 보여줌 자극의 종류 데이터 : 시스템이 처리해야 하는 데이터가 도착 이벤트 : 시스템 처리를 활성화하는 이벤트가 발생 시스템 동작 방식 데이터 처리 시스템 시스템에서 보낸 데이터를 처리(예 : 전화 과금 시스템) 실시간 시스템 이벤트가 시스템을 작동, 이벤트와 연관된 데이터가 있을 수 있음(필수X)(예: 유선전화기) 데이터 주도 모델링 데이터 주도 모델 입력 데이터 처리와, 입력 처리와 연관된 출력 생성과 관련된 일련의 행동 (= 처음부터 끝까지 시스템의 처리 사항을 보여줌) 요구사항 분석 중에 사용될 수 있음 처음으로 사용된 그래픽 소프트웨어 모델 데이터 흐름 모델 특정..

Tistory

[소프트웨어공학] 요구공학에서의 요구사항 명세 분석

요구사항 명세 — 사용자 요구사항 및 시스템 요구사항을 문서로 작성하는 과정 이상적인 요구사항 작성 조건 대상 : 사용자 요구사항과 시스템 요구사항 모두 특징 : 명확하고, 모호하지 않으며, 이해하기 쉽고, 완전하고, 일관성 있어야 함 실제로 달성 어려움 ← 충돌이나 불일치 자주 발생 ← 이해당사자들간의 다른 해석 사용자 요구사항 작성 단순한 표,양식, 직관적 다이어그램을 가지고 자연어로 작성 기술적 지식이 없는 시스템 사용자가 이해할수 있도록 기능적/비기능적 요구사항을 포함 시스템의 외부 동작에 대해서만 명세 시스템 이케텍처나 설계에 대한 상세한 내용X 시스템 요구사항 작성 사용자 요구사항에 상세한 내용 추가 시스템의 외부 동작과 운영상의 제약에 대해서만 기술 시스템의 설계와 구현에 대해서는 다뤄선 안..

Tistory

[소프트웨어공학] 요구사항 검증/변경/관리

요구사항 검증 고객이 정말 원하는 시스템인가?를 점검 도출 및 분석과정과 겹침 요구사항에서 문제점을 찾는 것과 관련 요구사항 검증은 매우 중요한 과정 이후 단계에서 요구사항 문서상 오류가 발견될 경우 막대한 재작업 비용 필요 ← 주로 개발 중이나 서비스 시작 후에 문제점이 발견되기 때문 시스템 변경을 통해 요구사항 문제를 수정할 경우 높은 비용 발생 ← 시스템 설계와 구현 변경, 테스트 다시 수행 → 설계나 코드 오류보다 훨씬 높은 비용 요구사항 검증시 점검해야 하는 사항들 유효성 점검 요구사항이 시스템 사용자의 실제 요구를 반영하는가? 일관성 점검 문서상의 요구 사항이 서로 상충되지 않는지 확인 → 모순되는 제약이나 같은 기능에 대한 다른 설명이 없는지 확인 완전성 점검 의도한 모든 기능과 제약이 정의..

Tistory

[소프트웨어공학] 시스템 모델링 개념과 UML 다이어그램 유형 5가지

시스템 모델링 시스템의 추상 모델을 개발하는 프로세스 각 모델은 시스템의 서로 다른 뷰나 관점을 나타냄 UML 다이어그램 유형 기반 그래픽 표기법으로 나타냄 모델의 단계별 사용 요구공학 프로세스 : 시스템의 상세 요구사항을 이끌어내기 위해 사용 설계 프로세스 : 엔지니어들에게 시스템을 설명하기 위해 사용 구현 후 : 시스템의 구조와 동작을 문서화하기 위해 사용 기존 및 새 시스템의 모델 개발 요구공학 중에 사용됨 기존 시스템의 모델 기존 시스템이 무엇을 하는지 알려줌 이해당사자간 논의를 강점과 약점에 집중하는데 사용 새 시스템의 모델 제안된 요구사항들을 다른 시스템 이해당사자들에게 설명하는데 사용 엔지니어들은 이 모델들을 설계를 논의하고 시스템을 문서화하는데 사용 시스템 모델 검토 중인 시스템의 추상화(..

Tistory

[소프트웨어공학] 요구공학 프로세스/스토리와 시나리오

요구공학 프로세스 요구공학 프로세스에 대한 나선형 뷰 관련 활동들이 나선 형태의 반복 프로세스들로 구성 각 활동에 소요한 시간과 노력의 양은 특성에 따라 달라짐 요구사항 도출 및 분석 시스템 요구사항을 얻어내는 프로세스 기존 시스템 관찰, 업무 분석, 잠재적 사용 자 및 구매자와 토의 하나 이상의 시스템 모델과 프로토타입을 만들기도 함 → 명세할 시스템 이해에 도움 요구사항 명세화 요구사항을 담은 문서 작성 두 가지 유형의 요구사항이 포함될 수 있음 사용자 요구사항 : 시스템 요구사항에 대한 추상적인 문장들(고객과 시스템 최종 사용자용) 시스템 요구사항 : 제공할 기능에 대한 상세한 설명 포함 요구사항 검증 요구사항에 대한 현실성,일관성,완전성을 검사 요구사항 문서상의 오류를 발견하고 수정하여 문제를 바..

Tistory

[소프트웨어공학] 요구사항 도출 및 분석 프로세스

요구사항 도출 이해당사자들의 업무 지원을 위해 신규 시스템을 활용하는 방식을 이해하는 것 요구사항을 알아내기 위해 소프트웨어 엔지니어는 이해당사자들과 함께 일함 예 ) 응용 도메인, 업무 활동, 이해당사자들이 원하는 시스템 기능, 필요한 기능, 하드웨어 제약 등 요구사항 도출이 어려운 이유 애매하고 비현실적인 요구사항 아주 일반적인 용어로만 표현 타당하고 그른것을 잘 모름 도메인 경험이 전제된 상태에서의 요구사항 요구사항을 전문용어를 사용해서 표현 → 경험 없는 요구사항 엔지니어는 이해못함 여러 명의 이해당사자들의 서로 다른 요구사항 → 요구사항 엔지니어는 요구사항에 대한 모든 잠재적 출처를 찾고 공통점과 상충점을 찾아내야함 정치적 요소가 시스템 요구사항에 영향을 줄 수 있음 권력을 얻기 위해 관리자에게..

Tistory

[소프트웨어공학] 요구공학과 요구사항 분석

요구사항과 요구공학 요구사항 한 시스템이 제공해야하는 서비스들과 그 서비들의 동작에 관한 제약을 기술한 것 특정 목적을 제공하는 시스템에 대한 고객의 요구 반영 요구사항이라는 용어를 일관성있게 사용하진 않음 사용자 요구사항 : 단순 시스템이 제공해야 하는 서비스에 대한 추상적 서술 및 시스템 제약사항 시스템 요구사항 : 시스템 기능에 대한 상세하고 정형화된 정의 요구사항 용어 정의 차이가 발생하는 이유 한 회사가 소프트웨어 개발 프로젝트에 대한 계약을 허용하려고 한다. 계약을 위해선 요구사항을 작성해야만 비용을 협상하고, 솔루션을 제공해 줄 수 있다. 그렇기 때문에 회사측에서는 요구사항을 작성해야만 한다. 그런데 회사측에서는 아직 사전 정의된(구체적인) 요구들이 없기 때문에 회사에서는 매우 추상적인 방식..

Tistory

[소프트웨어공학] 애자일 프로젝트 관리- 스크럼

애자일 프로젝트 관리 소프트웨어가 계획된 예산 내에서 기한 내에 개발되어 배포되도록 하는 것 → 소프트웨어 관리자들의 주요 업무 계획 주도 접근법에서의 관리자들의 역할 애자일 개발은 팀이 사용할 수 있는 시간과 자원을 최대한 잘 이용하도록 애자일 기법을 관리 점증적 개발 및 애자일 방법에 사용되는 방식에 맞게 조정된 접근 방식 필요 스크럼 애자일 프로젝트를 조직화하기 위한 프레임워크를 제공, 진행중인 내용에 대한 외부 가시화 제공하는 기법 조직에게 애자일 프레임워크를 제공하는데 초점(특정 개발 방법 강요x) 스크럼 단계 1.개요 계획 단계: 프로젝트의 일반적인 목표 설정 및 소프트웨어 구조 디자인 2.일련의 스프린트 사이클들: 각 사이클은 시스템의 증가분을 개발 3.프로젝트 종료 단계: 필수 문서(도움말..

Tistory

[소프트웨어공학] 애자일 기법 이슈와 해결방안

대규모 시스템에 애자일 접근법 사용 대규모 시스템은 개발에 오랜 시간이 걸려서 몇 가지 문제점이 발생 할 수 있다. 애자일 개발은 약식으로 진행 → 큰 기업에서는 계약 사항을 정하기 위한 법적 방식과는 안맞음 애자일 기법은 소프트웨어 유지보수보다 소프트웨어 개발 때가 적합 → 큰 기업엣 발생하는 소프트웨어 비용은 대부분 기존 소프트웨어 시스템의 유지 보수 비용임 애자일 기법은 소규모이며 같은 장소에서 일하는 팀을 대상으로 고안 → 요즘 소프트웨어 개발은 전 세계에 분산된 팀에서 이뤄지는 경우가 많음 계약 관련 이슈 애자일 기법 사용시 발생하는 주요 문제 소프트웨어 개발과 관련된 계약 (고객이 시스템 개발을 위해 외부 조직을 활용하는 경우) 소프트웨어 요구사항 문서(고객과 공급자 사이에 발생하는 계약의 일..

Tistory

[소프트웨어공학] 테스트 주도 개발

테스트 우선 철학 점증적 개발 방식 시스템 테스트를 위해 사용할 수 있는 시스템 명세가 없음 매우 비공식적인 방식으로 테스팅 프로세스 진행(계획 주도 테스팅 대비) 테스트 우선 개발 방법 테스트를 개발 프로세스의 중심에 둠 모든 테스트를 성공하기 전엔 개발을 진행못함 XP에서 수행하는 테스팅의 주요 특징 테스트 우선 개발 시나리오를 가지는 점증적 테스트 개발 테스트 개발 및 검증에서 사용자 참여 테스트 자동화 프레임 워크 사용 테스트 주도 개발법(Test Driven Development) 테스트 우선 철학이 발전하여 일반화된 기법 코드 작성 전에 테스트 먼저 작성 코드를 작성하면서 테스트 실행 가능 개발 과정에서 문제점을 찾을 수 있음 테스트는 프로그램과 같이 작성되어야함 ← 자동으로 테스트를 실행하기..

Tistory

[소프트웨어공학] 애자일 기법의 개념과 활용

애자일 기법 등장 배경 예전엔 계획 주도 접근법이 주로 사용됨(1980년대 ~ 1990년대 초) 더 좋은 소프트웨어를 만들기 위해서 대규모의 소프트웨어 제작을 위한 방식이자 그런 시스템을 개발했던 공학단체로부터 비롯됨 예 ) 현대식 항공기 제어 시스템 - 초기 명세부터 배포까지 10년은 족히 걸림 계획, 설계 및 문서화에 오버헤드가 많이 발생 → 애자일 기법 등장 이유 무거운 접근법에 대한 불만 때문에 애자일 기법 등장(1990년대 말) 개발팀이 설계와 문서작업보다 소프트웨어 개발 자체에 더 집중 요구사항이 자주 변경되는 어플 개발할때 적합한 방식 유용한 소프트웨어를 빠르게 만들 수 있도록 고안(신속한 소프트웨어 개발) 신속한 소프트웨어 개발의 필요성 비즈니스 시스템에서 가장 중요한 요구사항 ← 새로운 ..

Tistory

[소프트웨어 공학] 소프트웨어 프로세스 공학 활동

소프트웨어 프로세스 공학 활동 소프트웨어 프로세스 소프트웨어 공학 활동 소프트웨어 명세화 기능과 운영상의 제약조건 정의 소프트웨어 개발 명세를 만족하는 소프트웨어 개발 소프트웨어 검증 고객의 요구와 일치하는지 검증 소프트웨어 진화 변화하는 고객의 요구 충족시키기 위해 진화 프로세스 설명 시 중요한 항목 프로세스 활동의 결과물 제품과 산출물(아키텍처 설계 활동의 결과물 : 소프트웨어 아키텍쳐 모델) 역할 프로세스 참여하는 사람들의 역할(프로젝트 관리자, 형상 관리자, 프로그래머 등) 사전/사후 조건 프로세스 활동 또는 제품 제작 완료 전과 후에 만족해야 하는 조건 아키텍처 프로세스 예시 사전조건(설계 전) : 사용자가 모든 요구사항을 승인해야함 사후조건(설계 후) : 아키텍처를 나타내는 UML모델에 대한 ..

Tistory

[소프트웨어 공학] 소프트웨어 프로세스 3가지 모델

소프트웨어 프로세스 모델 소프트웨어 프로세스 모델 일반적인 소프트웨어 프로세스 모델 폭포수 모델 기본적인 프로세스 활동으로 명세화, 개발,검증,진화 거침 개별적인 프로세스 단계로 모델을 나타냄 점증적 개발 명세화, 개발 및 검증 활동이 서로 중첩되는 접근법 연속적인 버전을 통해 시스템 개발(각각의 버전은 이전버전에 기능 추가) 통합 및 환경 설정(재사용 지향 소프트웨어 공학) 재사용 가능한 컴포넌트나 시스템의 사용가능 여부에 의존하는 접근법 사용할 컴포넌트들을 조합하고 하나의 시스템으로 통합하는데 중점 폭포수 모델( = 소프트웨어 생명 주기) 대규모 군사 시스템 개발에 사용했던 공학 프로세스 모델 기반 계획 주도 프로세스의 한 종료 → 개발 시작 전 모든 활동에 대한 일정 계획 필요 각 단계는 기본적인 ..

Tistory

[소프트웨어공학] 소프트웨어공학 개념 및 유형

소프트웨어 프로그램과 관련된 모든 사항(관련 문서, 라이브러리, 사이트, 환경설정 데이터) 전문적으로 개발된 소프트웨어는 많은 요소들로 구성(다수의 프로그램,환경설정, 시스템 문서 등) 소프트웨어 제품 유형 일반 제품 특정 개발 조직이 생산한 독립적 시스템 누구든 구매 가능 개발 조직이 소프트웨어 명세를 관리 데이터베이스, 문서 편집기, 그래픽 패키지, 회계 시스템 등 맞춤식 소프트웨어 특정 고객의 요구에 맞춰 개발 소프트웨어 계약자는 고객만을 위해서 설계하고 구현 구매자가 소프트웨어 명세를 개발하고 관리 항공 관제 시스템, 전자기기 제어 시스템 이러한 제품유형의 차이는 점점 희미해지고 있음 소프트웨어 필수 특성 수용성(Acceptability) → 설계한 목적에 부합하는 사용자 유형이 수용할 수 있..

Tistory

[소프트웨어공학] 소프트웨어공학 윤리와 사례분석

소프트웨어 공학 윤리 행동 기준 비밀 유지 → 공식적인 비밀 유지에 관한 협약이 없더라도 고객의 비밀을 유지해야한다. 능력 → 엔지니어는 자신의 능력 밖의 일을 알면서도 맡아서는 안된다. 지적 재산권 → 엔지니어는 특허나 저작권 등의 지적 재산 사용을 관장하는 법규를 잘 알고 있어야함 → 고객의 지적 재산이 확실하게 보호받도록 주의해야함 컴퓨터 남용 → 컴퓨터 남용의 목적으로 기술적 능력을 사용해선 안됨(직장 컴퓨터 게임, 바이러스 배포 등) ACM/IEEE 행동강령 ACM과 IEEE는 공동으로 윤리와 직업적 실무에 대한 행동강령을 정함 행동 강령에 대한 축약본은 높은 수준의 추상화에서의 목표를 요약한 것임 → 목표가 어떻게 엔지니어 전문가의 행동을 변화시키는지에 대한 사례와 상세내용 제공 → 목표와 세..

Tistory

[C++] 백준 17485 - 진우의 달 여행 (Large)

문제 이해 단계 문제 우주비행이 꿈이였던 진우는 음식점 '매일매일싱싱'에서 열심히 일한 결과 달 여행에 필요한 자금을 모두 마련하였다! 지구와 우주사이는 N X M 행렬로 나타낼 수 있으며 각 원소의 값은 우주..

Tistory

[C++] 백준 2624 - 동전 바꿔주기

문제 이해 단계 문제 명보네 동네 가게의 현금 출납기에는 k 가지 동전이 각각 n1, n2, … , nk개 씩 들어있다. 가게 주인은 명보에게 T원의 지폐를 동전으로 바꿔 주려고 한다. 이때, 동전 교환 방법은 여러 가지..

Tistory

[C++] 백준 5557 - 1학년

문제 이해 단계 문제 상근이가 1학년 때, 덧셈, 뺄셈을 매우 좋아했다. 상근이는 숫자가 줄 지어있는 것을 보기만 하면, 마지막 두 숫자 사이에 '='을 넣고, 나머지 숫자 사이에는 '+' 또는 '-'를 넣어 등식을 만..

Tistory

[C++] 백준 9251 - LCS

문제 이해 단계 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 A..

Tistory

[C++] 백준 12865 - 평범한 배낭

문제 이해 단계 문제 이 문제는 아주 평범한 배낭에 관한 문제이다. 한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐..

Tistory

[Unity 3D] #3 코루틴을 활용한 작아지는 효과 구현 - Avoid Chess

학교 과제랑 스터디, 알바 등 여러가지에 치여다니느라 게임 프로젝트가 우선순위에서 밀리다보니 일주일정도 손을 못 댔다. 오랜만에 살짝 여유시간이 생겨서 프로젝트를 할 수 있게 됐다. 곧 있으면 중간고사라..

Tistory

[C++] 백준 2293 - 동전1

문제 이해 단계 문제 n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도..

Tistory

[C++] 백준 21317 - 징검다리 건너기(DP풀이)

문제 이해 단계 문제 심마니 영재는 산삼을 찾아다닌다. 산삼을 찾던 영재는 N개의 돌이 일렬로 나열되어 있는 강가를 발견했고, 마지막 돌 틈 사이에 산삼이 있다는 사실을 알게 되었다. 마지막 돌 틈 사이에..

Tistory

[C++] 백준 11660 - 구간 합 구하기5

문제 이해 단계 문제 N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다. 예를 들어, N = 4이고, 표가 아래와 같이 채..

Tistory

[C++] 백준 2294 - 동전2

문제 이해 단계 문제 n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수..

Tistory

[C++] 백준 10844 - 쉬운 계단 수

문제 이해 단계 문제 45656이란 수를 보자. 이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다. N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수..

Tistory

[C++] 백준 2156 - 포도주 시식

문제 이해 단계 문제 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지..

Tistory

[C++] 백준 9095 - 1,2,3 더하기

문제 이해 단계 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의..

Tistory

[C++] 백준 15486 - 퇴사2

문제 이해 단계 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담..

Tistory

[C++] 백준 9465 - 스티커

문제 이해 단계 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티..

Tistory

[C++] 백준 1890 - 점프

문제 이해 단계 문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다. 각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거..

Tistory

[C++] 백준 11055 - 가장 큰 증가 부분 수열

이해 단계 문제 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증..

Tistory

[C++] 백준 11053 - 가장 긴 증가하는 부분 수열

문제 이해 단계 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10,..

Tistory

[C++] 백준 22857 - 가장 긴 짝수 연속한 부분 수열 (small)

문제 이해 단계 문제 길이가 N인 수열 S가 있다. 수열 S는 1 이상인 정수로 이루어져 있다. 수열 S에서 원하는 위치에 있는 수를 골라 최대 K번 삭제를 할 수 있다. 예를 들어, 수열 S가 다음과 같이 구성되..

Tistory

[C++] 백준 2407 - 조합

문제 이해 단계 문제 nCm을 출력한다. 입력 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) 출력 nCm을 출력한다. 예제 입력 1 100 6 예제 출력 1 1192052400 수학에서 조합을 뜻하는 nCr에서 n..

Tistory

[C++] 백준 17626 - Four Square

문제 이해 단계 문제 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42..

Tistory

[C++] 백준 2579 - 계단 오르기

문제 이해 단계 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는..

Tistory

프로세스와 쓰레드의 차이 (Process vs Thread)

프로세스와 쓰레드의 개념 우선 차이점을 알기 위해서 프로세스와 쓰레드의 개념부터 간단히 살펴보자. 프로세스(Process) : 운영체제로부터 자원을 할당받는 작업의 단위 프로세스는 운영체제에서 다루는 용어인..

Tistory

[Unity 3D] #2 - 파티클 시스템을 활용한 방사형 보스 패턴 구현

구현 목표 보스 패턴 중 부채꼴로 불을 뿜는 보스 패턴을 만들려고 한다. 플레이어의 위치를 인식하고, 일정 시간동안 부채꼴로 불꽃을 방사한다. 불꽃에 닿은 플레이어는 데미지를 입는다. 목표를 확실히 하기 위..

Tistory

[Unity 3D] #1 - 적 밟아서 데미지 주기 구현

구현 목표 마리오 게임처럼 적군을 밟아서 데미지를 주는 것을 구현하려고 한다. 데미지를 주는 것과 동시에 밟았을 때 조금 위로 튕겨 올라가는 효과를 부여하려고 한다. 그림은 좀 허접하긴 한데, 위의 그림처..

Tistory

[C++] 백준 1010 - 다리 놓기

문제 이해 단계 문제 재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪..

Tistory

[C++] 백준 2839 - 설탕배달 (DP풀이)

문제 이해 단계 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그..

Tistory

[C++] 백준 9466 - 텀프로젝트

문제 이해 단계 문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만..

Tistory

[C++] 백준 22868 - 산책(small)

문제 이해 단계 문제 코로나로 인하여 확찐자가 되버려 오늘부터 산책을 하려고 한다. 산책할 경로를 정하려고 한다. 현재 있는 곳 S에서 출발하여 S와 다른 곳인 E를 찍고 다시 S로 돌아오는 경로로 만들려..

1 2 3 4 5