howudong의 등록된 링크

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

Tistory

[운영체제] 프로세스의 개념과 구조 ( with PCB )

프로세스 개념 프로세스(process) = 작업(job) : 모든 CPU 활동들 비공식적으로, 프로세스란 실행 중인 프로그램 프로세스의 현재 활동 상태는 프로그램 카운터 값 + 프로세서 레지스터의 내용 프로세스의 구조 텍스트 섹션 : 실행 코드 프로그램 실행 시간 동안 크기 고정 데이터 섹션 : 전역 변수 프로그램 실행 시간 동안 크기 고정 힙 섹션 : 프로그램 실행 중 동적으로 할당되는 메모리 프로그램 실행 중 동적으로 변함 메모리가 동적으로 할당됨에 따라 힙이 커짐 반대로 메모리가 시스템에 반환되면 축소됨 스택 섹션 : 함수 호출 시 임시 데이터 저장소(함수 매개변수, 복귀 주소, 지역변수) 프로그램 실행 중 동적으로 변함 함수 호출 → 매개변수, 지역변수, 복귀 주소를 포함하는 활성화 레코드가 스택..

Tistory

[운영체제] 운영체제의 빌딩과 부팅, 그리고 디버깅

운영체제 빌딩과 부팅 일반적인 운영체제 → 다양한 주변장치 구성을 가진 모든 종류의 컴퓨터에서 실행되도록 설계 운영체제 생성 운영체제 생성 절차 운영체제 소스 코드 작성 운영체제가 실행될 시스템의 운영체제 구성 운영체제 컴파일 운영체제 설치 컴퓨터와 새 운영체제 부팅 시스템 빌드 시스템 관리자가 운영체제 소스 코드의 사본을 수정한 뒤, 운영체제가 완전히 컴파일된다. 컴파일 시, 각 데이터는 구성 파일에 설명된 시스템에 맞는 운영체제의 출력-오브젝트 버전을 생성 상세한 조정을 할 수 없는 수준에서 시스템 설명을 통해 기존 라이브러리에서 사전 컴파일된 오브젝트 모듈을 선택 가능 모듈들이 서로 링크되어 새로운 운영체제 생성 → 지원되는 I/O 장치 드라이버를 포함한 라이브러리에서 필요한 것만 선택 가능 장점 ..

Tistory

[C++] 백준 11657 타임머신

문제 이해 단계 https://www.acmicpc.net/problem/11657 11657번: 타임머신 첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. www.acmicpc.net N개의 도시와 M개의 버스 노선이 주어진다. M개의 버스 정보로는 A, B, C가 들어오는데, (출발지, 도착지, 걸리는 시간)이다. 걸리는 시간에는 음수도 존재한다. 1번 도시에서 출발해서 각 도시별로 가장 빠른 시간을 출력한다. 이때, 무한대로 음수로 가는 시간이 나올 경우 -1을 출력한다. 또한 그 도시로 갈 수 없..

Tistory

[네트워크/Network] OSI 와 TCP/IP의 계층 구조 및 데이터 통신 과정

네트워크의 규칙 프로토콜이란? 통신을 하기 위한 규칙(네트워크의 규칙) 규칙들은 상호 간의 영향을 주지 않는다.(독립적) OSI 모델 OSI 모델이란? 과거에는 케이블을 연결하는 커넥터나 컴퓨터가 회사끼리 다르면 통신을 할 수 없었음 → 다른 회사끼리 통신하고자 공통으로 사용할 수 있는 표준 규격을 정함 ISO : 표준 규격을 정하는 국제표준화기구 단체 → OSI모델이라는 표준 규격을 제정 OSI 모델 : 네트워크 기술의 기본이 되는 모델 7개의 계층(레이어)으로 나눔 통신할 때 데이터는 맨 위의 계층에서 아래 계층으로 순차적으로 전달 각 계층 설명 7 계층 - 응용 계층 애플리케이션 계층 이메일, 파일 전송, 웹사이트 조회 등 애플리케이션에 대한 정보 제공 6 계층 - 표현 계층 프레젠테이션 계층 문자..

Tistory

[네트워크/Network] 기초 용어 설명 및 LAN / WAN 구성

네트워크의 구조 컴퓨터 네트워크란? 컴퓨터가 2대 이상 연결되어 있으면 컴퓨터 네트워크 할 수 있는 일 데이터 전송, 웹 사이트 열람, 메일 송수신 인터넷 : 전 세계의 큰 네트워크부터 작은 네트워크까지 연결하는 거대한 네트워크 패킷이란? 송/수신 간에 네트워크를 통해 전송되는 데이터의 작은 조각 큰 데이터가 있더라도 작게 나누어 보내야 함 작게 나누어 보내야 하는 이유 큰 데이터는 대역폭을 많이 차지 → 정체 발생 대역폭(bandwidth) 네트워크에서 이용 가능한 최대 전송 속도 정보를 전송할 수 있는 단위 시간당 전송량 용량이 큰 사진 데이터는 패킷으로 나눠서 보내야 함 → 목적지에 도착하면 원래 사진으로 되돌리는 작업 필요 패킷이 전송될 때 순서대로 도착하지 않거나, 누락될 수도 있음 → 목적지에..

Tistory

[운영체제] 설계와 구현 & 운영체제 구조의 종류 정리

운영체제 설계 및 구현 설계 목표 시스템 설계의 첫 번째 문제점 → 시스템의 목표와 명세를 정하는 일 시스템 설계의 최상위 수준에서는 하드웨어와 시스템 유형의 선택에 영향을 받음 시스템 유형 : 일괄처리, 시분할, 단일 사용자, 다중 사용자, 분산, 실시간, 범용 등 최상위 설계 수준을 넘어서면 요구 조건을 일일이 명시하는 것이 훨씬 어려워짐 요구 조건은 근본적으로 사용자 목적과 시스템 목적 2가지 그룹으로 나뉨 사용자 목적 : 사용자들이 시스템에 기대하는 특징 시스템은 사용하기 쉽고, 편리하고, 믿을 수 있고, 안전하고, 신속해야 함 특징을 구현하는 방법에 대한 일반적인 합의 사항 X → 설계 명세에 쓸모없음 시스템 목적 : 시스템에 관련된 사람들에 의해 요구조건들이 정의되는 것 운영체제는 설계, 구현..

Tistory

[운영체제] 링커(Linker)와 로더(Loader) 개념 정리

링커(Linker)와 로더(Loader) 프로그램은 디스크에 이진 실행 파일(ex : a.out, prog.exe)로 존재해야 함 소스 파일은 임의의 물리 메모리 위치에 적재되도록 설계된 오브젝트 파일로 컴파일됨 이러한 형식의 파일을 재배치 가능 오브젝트 파일이라고 불림 프로그램을 CPU에서 실행하는 절차를 설명할 예정 CPU에서 실행하려면, 프로그램을 컴파일하고 메모리로 가져와 프로세스 형태로 배치해야 함 링커 : 재배치 가능 오브젝트 파일을 하나의 이진 실행 파일로 결합 링킹 단계에서 다른 오브젝트 파일 또는 라이브러리 포함될 수 있음 표준 C 라이브러리, 수학 라이브러리 등 로더 : 이진 실행 파일을 메모리에 적재 프로그램 부분에 최종 주소를 할당, 프로그램 코드와 데이터를 해당 주소와 일치하도록 ..

Tistory

[운영체제] 시스템 서비스와 프로그램이 OS마다 다른 이유

시스템 서비스 시스템 유틸리티라고도 불리고 프로그램 개발과 실행을 위해 더 편리한 환경을 제공 일부 : 단순한 시스템 콜에 대한 사용자 인터페이스 대부분 : 훨씬 더 복잡함 시스템 서비스는 다음의 범주로 분류 가능 파일 관리 이 프로그램은 파일과 디렉터리 제어와 관련된 조작을 한다. 파일 디렉터리 생성, 삭제, 복사, 이름 바꿈, 인쇄, 열거, 조작 등 상태 정보 통상 이 프로그램들은 정보를 출력 장치 혹은 파일로 포맷하여 인쇄, 혹은 GUI의 윈도에 표시 단순히 는 날짜, 시간, 가용 메모리, 디스크 공간의 양, 사용자 수 등의 상태 정보 제공 복잡하게는 상세한 성능, 로깅 및 디버깅 정보를 제공 몇몇 시스템은 환경 설정 정보를 저장하고 검색할 수 있는 등록 기능 제공 파일 변경 디스크나 다른 저장 장..

Tistory

[운영체제] 시스템 콜(2) - 시스템 콜의 유형 정리

다섯 가지 중요한 범주로 묶을 수 있음 → 프로세스 제어, 파일 조작, 장치조작, 정보 유지 보수, 통신과 보호 1. 프로세스 제어 실행 중인 프로그램은 수행을 정상적 또는 비정상적으로 멈출 수 있어야 한다. 시스템 종류에 따른 제어 차이 정상 또는 비정상적인 상황에서, 운영체제는 명령 인터프리터로 제어를 전달한 상태 ← 사실 운영체제는 명령 인터프리터로 제어를 전달해야 함 대화식 시스템 단순히 다음 명령을 계속 수행 사용자가 오류에 대응하여 적절한 명령을 내릴 것이라고 가정함(사용자에게 맡김) GUI 시스템 비정상적인 상황이라면, 팝업창이 사용자에게 오류를 알리고 지시를 기다림 기타 시스템 오류가 발생한 경우, 제어 카드를 사용하여 특별한 복구 조치를 지시 오류 발견 뒤 비정상적으로 종료하기를 원한다면..

Tistory

[운영체제] 시스템 콜(1) - 시스템 콜의 개념과 API, 운영체제와의 관계

시스템콜이란? 시스템 콜이 사용되는 방법의 예 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스 제공 간단한 프로그램이라도 운영체제의 기능을 아주 많이 사용 초당 수천 개의 시스템 콜을 수행 사용자 대부분은 이러한 상태를 알지 못함 → 응용 개발자들은 API에 따라 프로그램 설계 모든 운영체제는 고유한 시스템 콜 이름을 가짐 응용 프로그래밍 인터페이스(API) 응용 프로그래머가 사용 가능한 함수의 집합을 명시 각 함수에 전달되어야 할 매개변수와 반환값 포함 프로그래머는 운영체제가 제공하는 코드의 라이브러리를 통해 API를 활용 막후에서 API를 구성하는 함수들은 통상 응용 프로그래머를 대신하여 실제 시스템 콜을 호출 예 : Windows 함수 CreateProcess() → NTCreatePro..

Tistory

[C++] 프로그래머스 Level 3 - 인사고과

문제 이해 단계 문제 설명 완호네 회사는 연말마다 1년 간의 인사고과에 따라 인센티브를 지급합니다. 각 사원마다 근무 태도 점수와 동료 평가 점수가 기록되어 있는데 만약 어떤 사원이 다른 임의의 사원보다 두 점수가 모두 낮은 경우가 한 번이라도 있다면 그 사원은 인센티브를 받지 못합니다. 그렇지 않은 사원들에 대해서는 두 점수의 합이 높은 순으로 석차를 내어 석차에 따라 인센티브가 차등 지급됩니다. 이때, 두 점수의 합이 동일한 사원들은 동석차이며, 동석차의 수만큼 다음 석차는 건너뜁니다. 예를 들어 점수의 합이 가장 큰 사원이 2명이라면 1등이 2명이고 2등 없이 다음 석차는 3 등부터입니다. 각 사원의 근무 태도 점수와 동료 평가 점수 목록 scores이 주어졌을 때, 완호의 석차를 return 하도..

Tistory

[C++] 백준 16938 - 캠프 준비

문제 이해 단계 https://www.acmicpc.net/problem/16938 16938번: 캠프 준비 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. www.acmicpc.net N개의 문제가 나열되어 있고, 각 문제는 정수로 난이도가 표현되어 있다. 이 중에서 2문제 이상을 골라야 한다. 고른 문제 난이도의 합이 L 이상, R 이하가 되어야 하고 최댓값과 최솟값의 차이가 X 이상이어야 한다. 해당 조건을 만족하는 문제의 경우의 수는 총 몇 개인지를 고르는 문제 문제 접근 단계 문제의 조건부터 살펴보자. 문제의 개수 N이 최대 15개밖에 안된다. 이 말은 탐색할게 몇 개 없어서 완전 탐색을 해도 된다는 소리다. 그리고 L과 R은 최대 \(10^9\) 이라 int 자료형..

Tistory

[C++] 백준 11509 - 풍선 맞추기

문제 이해 단계 https://www.acmicpc.net/problem/11509 11509번: 풍선 맞추기 첫 번째 예제 에서 [5,4,3] 을 터트리고 [2,1]을 터트리면 모든 풍선을 터트릴 수 있으므로 최소한 2개의 화살을 필요로 한다. www.acmicpc.net 왼쪽부터 오른쪽으로 일렬로 서있는 N개의 풍선이 있다. 그리고 화살은 H의 높이에서 오른쪽으로 출발하고 풍선에 부딪힐 때마다 풍선은 터지며, 화살은 높이가 H-1이 된다. 풍선과 화살은 높이가 같아야 부딪히는 것으로 간주한다. 해당 조건에서 N개의 풍선을 모두 터트릴 때 가장 적은 화살을 사용해라. 그리고 그 화살의 개수를 출력해라 문제 접근 단계 문제의 조건부터 살펴보면, 풍선의 개수 N와 높이 H는 최대 1,000,000개이다. ..

Tistory

[C++] 백준 3079 - 고냥이

문제 이해 단계 https://www.acmicpc.net/problem/16472 16472번: 고냥이 고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고 www.acmicpc.net 소문자로 이루어진 알파벳 문자열이 주어진다. 또한 입력으로 N이 주어지는데, 서로 다른 종류의 알파벳을 인식할 수 있는 개수이다. 구해야 하는 것은 N개의 서로 다른 종류의 알파벳을 인식할 수 있을 때, 주어진 문자열에서 인식할 수 있는 연속된 문자열 중 최대 길이를 구하는 문제 문제 접근 단계 늘 그렇듯, 제한사항부터 알아보자. 입력 N은 최대 26까지, 문자열의 길이는 최대 100,00..

Tistory

[C++] 백준 3079 - 입국심사

문제 이해 단계 https://www.acmicpc.net/problem/3079 3079번: 입국심사 첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109) www.acmicpc.net N개의 심사대와 M명이 주어진다. 각 심사대마다 심사하는데 소요되는 시간이 존재한다. M명은 한 줄로 서서 자기 차례를 기다리는데, 여러 개의 심사대 중 하나를 골라서 갈 수 있다. 이미 심사가 진행 중인 곳은 가지 못한다. 또한 몇 초를 기다렸다가 가는 것도 가능하다. 여러 가지 수를 조합해서 M명이 최대한 빨리 심사를 마치는 경우의 수를 조합할 때, 이때의 최소 ..

Tistory

[C++] 백준 16928 - 뱀과 사다리 게임

문제 이해 단계 https://www.acmicpc.net/problem/16928 16928번: 뱀과 사다리 게임 첫째 줄에 게임판에 있는 사다리의 수 N(1 ≤ N ≤ 15)과 뱀의 수 M(1 ≤ M ≤ 15)이 주어진다. 둘째 줄부터 N개의 줄에는 사다리의 정보를 의미하는 x, y (x < y)가 주어진다. x번 칸에 도착하면, y번 칸으 www.acmicpc.net 10x10 짜리 맵에 사다리와 뱀과 맵이 있다. 그리고 플레이어는 1~6까지 적혀있는 주사위로 움직인다. 목표는 1에서 100까지 움직이는 것이다. 주사위 결과가 100칸을 넘어서 움직이는 것이라면 이동할 수 없다. 사다리와 뱀은 둘 다 점프 개념으로 사다리는 뒤에서 앞으로, 뱀은 앞에서 뒤로 이동하는 개념이다. N개의 사다리와 M개의..

Tistory

[C++] 백준 20955 - 민서의 응급 수술

문제 이해 단계 https://www.acmicpc.net/problem/20955 20955번: 민서의 응급 수술 민서는 강원대학교 컴퓨터공학과의 신임 교수이다. 그녀가 저술한 효율적인 택배 배달을 위한 최적 경로 설계에 관한 연구 논문은 아직도 널리 인용되고 있다. 오늘도 열심히 강의를 하던 민서 www.acmicpc.net 뉴런(노드) N개와 시냅스(간선) M개가 들어온다. 이후 M 줄에 걸쳐 연결된 두 뉴런의 정보가 들어온다. 만들어야 하는 것은 하나로 연결된 트리, 즉 사이클이 존재하지 않아야 한다. 만약 사이클이 존재한다면 그 사이클을 끊어야 한다. 이러한 조건일 때 모든 뉴런을 하나의 연결된 트리로 만들 때 필요한 최소 연산 횟수를 구하는 문제 문제 접근 단계 문제에서 대놓고 뉴런과 시냅스,..

Tistory

[C++] 백준 18866 - 젊은 날의 생이여

문제 이해 단계 https://www.acmicpc.net/problem/18866 18866번: 젊은 날의 생이여 욱제의 젊은 날이 될 수 있는 최대 기간, 즉 문제의 조건을 만족할 수 있는 최대의 1 ≤ K > N; for(int i = 0; i < N; i++){ int v1,v2; cin >> v1 >> v2; v[i][0]= v1; v[i][1]= v2; } int young[N][2], old[N][2]; // 젊은날, 늙은날 최대 최소 정보 int max_happy = 0; int min_happy = INT32_MAX; int max_tired = 0; int min_tired = INT32_MAX; // 젊은 날은 1부터 ~ K까지 for(int i = 0; i < N; i++){ // ..

Tistory

[C++] 백준 16398 - 행성 연결

문제 이해 단계 https://www.acmicpc.net/problem/16398 16398번: 행성 연결 홍익 제국의 중심은 행성 T이다. 제국의 황제 윤석이는 행성 T에서 제국을 효과적으로 통치하기 위해서, N개의 행성 간에 플로우를 설치하려고 한다. 두 행성 간에 플로우를 설치하면 제국의 함 www.acmicpc.net 행성의 수 N개가 입력으로 들어온다. 이후 행성 간 관리 비용이 NxN 행렬로 들어오는데, 각각 \(C_{ij}\)로 i와 j 사이의 비용을 뜻한다. (i = j인 경우 0) 행성 N개를 모두 연결하는데 드는 비용을 최소화할 때, 최소화한 비용을 구하는 문제 문제 접근 단계 조건부터 보자면 행성의 수 N은 최대 1000개까지이다. 즉 NxN 행렬은 1,000,000개까지 생성될 수..

Tistory

[C++] 백준 4485 - 녹색 옷 입은 애가 젤다지?

문제 이해 단계 https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net NxN 2차원 맵이 주어진다. 각 칸에는 0 ~ 9까지에 정수가 적혀있다. 그리고 각 칸을 밟을 때마다 해당 점수를 얻는다. 점수를 최대한 적게 얻으면서 (0,0)에서 (N-1, N-1)까지 이동하는 것이 목표이다. 플레이어는 상하좌우로 움직일 수 있을 때, 최소 점수를 구하는 것이 문제이다. 문제 접근 단계 문제 조건부터 살펴보면 맵의 크기 N은 최대 125, ..

Tistory

[운영체제] 운영체제가 하는 일과 제공하는 방식(서비스와 사용자 인터페이스)

이번 포스팅 목표 운영체제가 사용자에게 제공하는 서비스에 대해 알아가는 것 사용자에게 서비스를 제공하기 위한 방식(인터페이스)을 알아가는 것 1. 운영체제 서비스 운영체제는 프로그램과 그 사용자에게 특정 서비스를 제공 서비스로 인해 프로그래머가 작업을 더 쉽게 수행 가능 운영체제 서비스를 바라보는 관점 - 사용자에게 도움을 주는 목적 사용자 인터페이스(UI) : 거의 모든 운영체제가 제공 그래픽 사용자 인터페이스(GUI), 터치 스크린 인터페이스, CLI 등 프로그램 수행(program execution) :시스템은 프로그램을 메모리에 적재해 실행 가능해야 함 프로그램 무조건 실행을 끝낼 수 있어야 함(정상이든, 비정상이든) 입출력 연산(I/O) : 수행 중인 프로그램은 입출력을 요구할 수 있음 입출력에..

Tistory

[C++] 백준 16168 - 퍼레이드 ( 직관적인 DFS 풀이 )

문제 이해 단계 https://www.acmicpc.net/problem/16168 16168번: 퍼레이드 첫 번째 줄에 지점의 개수 V, 연결 구간의 개수 E가 주어진다. (1 ≤ V ≤ E ≤ 3000) 이후 E개의 줄에 걸쳐 각 연결 구간이 연결하는 두 지점의 번호 Va, Vb가 공백을 사이에 두고 주어진다. (1 ≤ Va, www.acmicpc.net 노드(지점)의 개수 V와 간선(연결 구간) E가 입력으로 들어온다. 이후, 다음 줄에 \(V_a \;\; V_b \)가 M개가 들어온다. 해당 입력이 들어올 때, 노드는 중복해서 지나갈 수 있고, 간선은 한 번밖에 지나가지 못한다. 모든 간선을 지날 수 있을지 없을지에 판단하고, 가능하면 "YES" 없으면 "NO"를 출력해라 문제 접근 단계 문제 자..

Tistory

[C++] 백준 5639 - 이진 검색 트리 ( 2번째 다른 풀이 )

문제 이해 단계 예전에 풀었던 문제다.. 근데 못 풀었다. 그때는 3일 걸려서 풀긴 했었는데, 이번에는 풀지도 못했다. 블로그까지 써가면서 풀자고 했는데 못 풀었다. 예전에 했던 풀이는 아래 링크를 걸어두겠다 문제에 대한 설명 같은 것은 아래 링크를 참고해 주길 바란다. https://howudong.tistory.com/17 [C++] 백준 5639 - 이진 검색 트리 문제 이해 단계 문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있 howudong.tistory.com 문제 접근 단계 두 번째 풀이 방법은 첫 번째 방법보다는 좀 더 논리적인 방법이라고 할 수 있다. 첫 번째 방법..

Tistory

[C++] 백준 18769 - 그리드 네트워크 ( 그림으로 쉽게 이해하기 )

문제 이해 단계 https://www.acmicpc.net/problem/18769 18769번: 그리드 네트워크 재현이는 그리드 네트워크 컨설팅 회사를 운영하고 있다. 어떤 회사의 데이터 서버가 격자 형태의 그래프로 주어졌을 때, 최소의 비용을 들여서 전용 통신망을 설치하려고 한다. 이때, 전용 통 www.acmicpc.net 테스트케이스 T가 주어지고, 행과 열을 나타내는 R과 C가 주어진다. 또한 입력으로 C-1개가 R번 들어오고, C개가 R-1번 들어온다. 서버와 서버 사이에는 통신망이 존재하는데 각각 이동하는데 드는 비용이 존재한다. 설치 비용은 무조건 1,2,3,4 중 하나이다. 그리고 한 서버와 연결된 통신망(간선)의 비용은 중복되지 않는다. 이런 조건에서 모든 서버가 통신할 수 있도록 하는..

Tistory

[C++] 백준 14728 - 벼락치기

문제 이해 단계 https://www.acmicpc.net/problem/14728 14728번: 벼락치기 ChAOS(Chung-ang Algorithm Organization and Study) 회장이 되어 일이 많아진 준석이는 시험기간에도 일 때문에 공부를 하지 못하다가 시험 전 날이 되어버리고 말았다. 다행히도 친절하신 교수님께서 아래와 www.acmicpc.net N개의 단원과 사용할 수 있는 총 시간 T가 입력으로 주어진다. 둘째 줄에는 각 단원에 대해서 공부하는데 걸리는 예상 시간과 배점이 입력으로 들어온다. 해당 조건에서 총 시간 T를 분배해서 각 단원을 공부하여 배점을 얻을 때 얻을 수 있는 최대 점수를 구하는 문제 문제 접근 단계 최대 점수를 구하는 문제라길래 처음에는 그리디 문제가 아닌..

Tistory

[C++] 백준 14945 - 불장난

문제 이해 단계 https://www.acmicpc.net/problem/14945 14945번: 불장난 랩실의 크기가 3일 경우 (기웅, 민수)가 이동 가능한 방법은 (아래-아래, 대각-아래), (아래-아래, 대각-대각), (아래-대각, 대각-대각), (대각-아래, 아래-아래), (대각-대각, 아래-아래), (대각-대각, www.acmicpc.net 불이 있는 가장 위에서부터 시작해서 1초마다 아래, 오른쪽 아래, 왼쪽 아래로 퍼진다. 그리고 기웅, 민수도 위에서부터 시작하는데 이동 가능한 방법은 아래로 움직이거나 오른쪽 아래로 움직이는 2가지다. 기웅, 민수는 맨 위 칸을 제외하고는 이동 중에 겹쳐서는 안 된다. 입력으로 n이 주어지고 직각삼각형으로 위의 그림처럼 주어진다. 항상 가장 마지막 n칸에는..

Tistory

[C++] 백준 13910 - 개업

문제 이해 단계 https://www.acmicpc.net/problem/13910 13910번: 개업 해빈이는 짜장면을 정말 좋아한다. 짜장면을 너무 좋아한 나머지 짜장면만 파는 중국집을 개업했다! 해빈이는 양손잡이여서 동시에 두 개의 웍(중국 냄비)을 사용하여 요리할 수 있다. 그러나 www.acmicpc.net 문제는 그렇게 복잡하지 않다. N개의 짜장면을 M개의 웍을 가지고 만들어야 한다. 각각의 웍은 짜장면을 만들 수 있는 용량을 가지고 있고, N개의 짜장면을 만들 때 정확하게 N개만 만들어야 한다.이때 한번 요리할 때 M개의 웍 중 1개 또는 2개씩 선택할 수 있을 때, 최소한의 횟수로 요리를 만들 때 그 횟수를 구하는 문제 문제 접근 단계 요리 횟수 통일하기 일단 문제의 조건부터 살펴보면 짜..

Tistory

[C++] 백준 14925 - 목장 건설하기 ( BFS 풀이 )

문제 이해 단계 https://www.acmicpc.net/problem/14925 14925번: 목장 건설하기 랜드 씨는 퇴직금으로 땅을 사서 목장을 지으려 한다. 그가 사려고 소개받은 땅은 직사각형이고 대부분 들판이지만, 여기저기에 베기 어려운 나무와 치울 수 없는 바위가 있다. 그는 목장을 하 www.acmicpc.net MxN 맵에 장애물이 있다. 장애물은 1과 2로 나타난다. 이때 정사각형을 최대한 크게 만들 때, 정사각형 변의 길이 L의 길이를 구하는 문제 문제 접근 단계 문제는 굉장히 직관적이다. 제한사항부터 바로 살펴보면 N과 M의 최대 길이가 5000인 상황. 5000 x 5000 = 25,000,000까지 가능하다. 브루트 포스는 힘들어 보인다. 만들어야 하는 것은 2차원 맵이 주어지기..

Tistory

[C++] 백준 22871 - 징검다리 건너기 (large)

문제 이해 단계 https://www.acmicpc.net/problem/22871 22871번: 징검다리 건너기 (large) $N$개의 돌이 일렬로 나열 되어 있다. $N$개의 돌에는 수 $A_{1} A_{2} ... A_{i} ... A_{N}$로 부여되어 있다. 가장 왼쪽에 있는 돌에서 출발하여 가장 오른쪽에 있는 돌로 건너가려고 한다. 항상 오른쪽으 www.acmicpc.net N개의 돌이 일렬로 나열되어 있고 목표는 가장 왼쪽 돌에서 가장 오른쪽 돈으로 이동하는 것이다. 이동하는 데에는 아래 3가지 조건이 따른다 1. 무조건 왼쪽에서 오른쪽으로만 움직일 수 있다. 2. i번째 돌에서 j번째 돌로 이동할 때 드는 힘 K는 ( j - i ) * ( 1 + |\(A_i\) - |\(A_j\)| )이..

Tistory

[C++] 프로그래머스 Level 3 - 연속 펄스 부분 수열의 합

문제 이해 단계 문제 설명 어떤 수열의 연속 부분 수열에 같은 길이의 펄스 수열을 각 원소끼리 곱하여 연속 펄스 부분 수열을 만들려 합니다. 펄스 수열이란 [1, -1, 1, -1 …] 또는 [-1, 1, -1, 1 …]과 같이 1 또는 -1로 시작하면서 1과 -1이 번갈아 나오는 수열입니다. 예를 들어 수열 [2, 3, -6, 1, 3, -1, 2, 4]의 연속 부분 수열 [3, -6, 1]에 펄스 수열 [1, -1, 1]을 곱하면 연속 펄스 부분수열은 [3, 6, 1]이 됩니다. 또 다른 예시로 연속 부분 수열 [3, -1, 2, 4]에 펄스 수열 [-1, 1, -1, 1]을 곱하면 연속 펄스 부분수열은 [-3, -1, -2, 4]이 됩니다. 정수 수열 sequence가 매개변수로 주어질 때, 연속 ..

Tistory

[C++] 백준 17135 - 캐슬 디펜스

문제 이해 단계 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net NxM맵에 적이 배치되어 있다. 그리고 궁수는 무조건 NxM 맵 밖에 있는 N+1 위치에 3명만 존재한다. N+1 위치는 성의 위치이기도 하다. 하나의 칸에는 무조건 한 명이 궁수만 존재할 수 있다. 궁수는 사거리가 D 이하인 적들만 없앨 수 있다. 궁수 3명은 무조건 동시에 공격을 하며 같은 적을 공격할 수도 있다. 공격당한 적은 게임에서 제외된다. 적을 선정하는 기준은 궁수에게 거리가 가..

Tistory

[C++] 백준 16235 - 나무 재테크

문제 이해 단계 문제 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1 ×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1 ×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송하고, 모든 칸에 대해서 조사를 한다. 가장 처음에 양분은 모든 칸에 5만큼 들어있다. 매일매일 넓은 땅을 보면서 뿌듯한 하루를 보내고 있던 어느 날 이런 생각이 들었다. 나무 재테크를 하자! 나무 재테크란 작은 묘목을 구매해 어느 정도 키운..

Tistory

[C++] 백준 16236 - 아기 상어

문제 이해 단계 문제 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1 ×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다. 아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다. 아기 상어는 자신의 크기보다 작은 물고기만 먹을 수 있다. 따라서, 크기가 같은 물고기는 먹을 수 없지만, 그 물고기가 있는 칸은 지나갈 수 있다. 아기 상어가 어디로 이동할지 결정하는 방법은 아래와 같다. 더 이상 먹을 수 있는 물고기가 공간에 없다면..

Tistory

[C++] 백준 17140 - 이차원배열과 연산

문제 이해 단계 크기가 3 ×3인 배열 A가 있다. 배열의 인덱스는 1부터 시작한다. 1초가 지날 때마다 배열에 연산이 적용된다. R 연산: 배열 A의 모든 행에 대해서 정렬을 수행한다. 행의 개수 ≥ 열의 개수인 경우에 적용된다. C 연산: 배열 A의 모든 열에 대해서 정렬을 수행한다. 행의 개수

Tistory

[C++] 정렬(sort) 정렬 규칙을 직접 만드는 compare의 필요성과 사용법

정렬(sort) - compare C++에서 자주 쓰이는 기능 중 헤더 안에 있는 sort 기능이 많이 쓰인다. 해당 함수는 벡터(vector)나 배열과 함께 사용한다. 아래는 사용법 예시이다. #include #include // sort 헤더파일 #include // 벡터 헤더파일 using namespace std; int array_size = 8; int main(){ int array[] = {4,5,2,1,5,1,74,5}; vector arr = {4,5,2,1,5,1,74,5}; sort(arr.begin(),arr.end()); sort(array,array+array_size,greater()); for(int i = 0; i < arr.size(); i++) { cout

Tistory

[C++] 백준 15685 - 드래곤 커브

문제 이해 단계 문제 드래곤 커브는 다음과 같은 세 가지 속성으로 이루어져 있으며, 이차원 좌표 평면 위에서 정의된다. 좌표 평면의 x축은 → 방향, y축은 ↓ 방향이다. 시작 점 시작 방향 세대 0세대 드래곤 커브는 아래 그림과 같은 길이가 1인 선분이다. 아래 그림은 (0, 0)에서 시작하고, 시작 방향은 오른쪽인 0세대 드래곤 커브이다. 1세대 드래곤 커브는 0세대 드래곤 커브를 끝 점을 기준으로 시계 방향으로 90도 회전시킨 다음 0세대 드래곤 커브의 끝 점에 붙인 것이다. 끝 점이란 시작 점에서 선분을 타고 이동했을 때, 가장 먼 거리에 있는 점을 의미한다. 2세대 드래곤 커브도 1세대를 만든 방법을 이용해서 만들 수 있다. (파란색 선분은 새로 추가된 선분을 나타낸다) 3세대 드래곤 커브도 2..

Tistory

[C++] 백준 20056 - 마법사 상어와 파이어볼

문제 이해 단계 어른 상어가 마법사가 되었고, 파이어볼을 배웠다. 마법사 상어가 크기가 N×N인 격자에 파이어볼 M개를 발사했다. 가장 처음에 파이어볼은 각자 위치에서 이동을 대기하고 있다. i번 파이어볼의 위치는 (ri, ci), 질량은 mi이고, 방향은 di, 속력은 si이다. 위치 (r, c)는 r행 c열을 의미한다. 격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고, 1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있다. 파이어볼의 방향은 어떤 칸과 인접한 8개의 칸의 방향을 의미하며, 정수로는 다음과 같다. 마법사 상어가 모든 파이어볼에게 이동을 명령하면 다음이 일들이 일어난다. 모든 파이어볼이 자신의 방향 di로 속력 si칸 만큼 이동한다. 이동하는 중에는 같은 칸에 여러..

Tistory

[Git] Rebase 개념 및 SourceTree에서 사용(Mac OS)

Pull Request를 보냈을 때 충돌이 난다면? Solution1. 내 브랜치에 병합 커밋을 만들어서 해결 브랜치 B에서 커밋1과 커밋2를 병합해서 병합충돌 문제를 해결한 커밋3을 만듦 커밋3은 충돌문제를 해결했기 때문에 정상적으로 브랜치A에 Pull Request 가능 But, 해당 방식은 Pull Request 때문에 쓸데없는 커밋 로그가 남게됨 → Rebase 방식을 사용하면 이런 문제 해결 가능 Solution2. Rebase Rebase : 커밋의 베이스를 떼서 다른 곳으로 붙이는 것 깔끔한 Pull Request를 보낼 수 있음 내 브랜치에 내 변경사항만 남길 수 있다는 장점이 있음 실수하면 파일 전체가 꼬이는 문제가 발생할 수 있으므로 조심해서 사용해야함 브랜치 B에 있는 커밋 1과 커밋..

Tistory

[C++] 백준 17144 - 미세먼지 안녕!

문제 이해 단계 문제 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1 ×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 1번 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼지가 있고, (r, c)에 있는 미세먼지의 양은 Ar, c이다. 1초 동안 아래 적힌 일이 순서대로 일어난다. 미세먼지가 확산된다. 확산은 미세먼지가 있는 모든 칸에서 동시에 일어난다. (r, c)에 있는 미세먼지는 인접한 네 방향..

Tistory

[C++] 백준 21277 - 짠돌이 호석

문제 이해 단계 DIY(Do It Yourself)는 호석이가 제일 좋아하는 콘텐츠이다. 이번 DIY는 동네 친구 하늘이랑 각자 직소 퍼즐을 하나씩 맞춰보기로 했다. 두 개의 퍼즐은 각자 N1 행 M1 열과 N2 행 M2 열의 격자 형태로 이루어져 있다. 각 격자는 정사각형 모양이며, 퍼즐 조각이 있을 수도 있고, 없을 수도 있다. 즉, 아래 그림도 올바른 퍼즐의 완성 형태이다. 성공적으로 DIY가 끝나서 퍼즐이 2개가 완성되었는데, 보관해야 하는 액자를 아직 구매하지 않았다. 그 이유는, 호석이는 엄청난 짠돌이기 때문에 퍼즐 하나마다 액자 하나를 사는 것은 상상도 못 하기 때문이다. 액자의 가격은 액자의 넓이(행의 개수 × 열의 개수)로 결정된다. 즉, 퍼즐 두 개를 퍼즐 조각끼리 같은 격자에서 만나지..

Tistory

[C++] 백준 20327 - 배열 돌리기 6

문제 이해 단계 https://www.acmicpc.net/problem/20327 20327번: 배열 돌리기 6 크기가 2N×2N인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 8가지가 있고, 연산에는 단계 ℓ (0 ≤ ℓ < N)이 있다. 단계 ℓ은 배열을 부분 배열로 나눌때 사용하는 값이며, 부분 www.acmicpc.net 이번 문제는 너무 길기 때문에 백준 링크로 대체한다. 요약하자면, 구현해야 하는 것이 총 8가지인데, 구현해야 할 기능은 총 4가지이다. 이 문제에서 특이한 점은 단계 L이란 것이 존재하는데, L은 부분배열을 의미한다. 부분 배열은 \(2^L * 2^L\) 크기여야 한다. 구현해야 하는 K는 1,2번 -> 같은 부분 배열에서 상하/좌우 배열 반전 3,4번 ->..

Tistory

[C++] 백준 17406 - 배열돌리기 4

문제 이해 단계 크기가 N×M 크기인 배열 A가 있을 때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 값은 4이다. 1 2 3 2 1 1 4 5 6 배열은 회전 연산을 수행할 수 있다. 회전 연산은 세 정수 (r, c, s)로 이루어져 있고, 가장 왼쪽 윗 칸이 (r-s, c-s), 가장 오른쪽 아랫 칸이 (r+s, c+s)인 정사각형을 시계 방향으로 한 칸씩 돌린다는 의미이다. 배열의 칸 (r, c)는 r행 c열을 의미한다. 예를 들어, 배열 A의 크기가 6 ×6이고, 회전 연산이 (3, 4, 2)인 경우에는 아래 그림과 같이 회전하게 된다. A[1][1] A[1][2] ..

Tistory

[C++] 백준 2877 - 4와 7

문제 이해 단계 문제 창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 K(1 ≤ K ≤ 10^9)가 주어진다. 출력 첫째 줄에 창영이가 좋아하는 숫자 중 K번째 작은 수를 출력한다. 예제 입력 1 1 예제 출력 1 4 예제 입력 2 2 예제 출력 2 7 예제 입력 3 3 예제 출력 3 44 짧고 간결해서 아주 좋은 문제 4와 7로 구성된 숫자 중에서 입력된 K번째로 작은 수를 구하는 문제 문제 접근 단계 문제에서 건질만한 것은 K의 범위가 \(10^9\) 리서 int 범위를 넘어가지 않는다는 것 정도? 그다음부터는 찾아내야 할 것 같다. 이렇게 수를 다루는 문제 같은 경우, 1번째부터 K번째 작은 수까지 한번 ..

Tistory

[C++] 백준 2469 - 사다리 타기

문제 이해 단계 k명의 참가자들이 사다리 타기를 통하여 어떤 순서를 결정한다. 참가자들은 알파벳 대문자 첫 k개로 표현되며, 사다리 타기를 시작할 때의 순서는 아래 그림과 같이 항상 알파벳 순서대로이다. k=10 인 예를 들어 보자. 10명의 A, B, C, D, E, F, G, H, I, J 참가자들이 사다리 타기를 준비한다. 아래 그림은 10개의 세로줄과 5개의 가로 줄을 가지고 있는 사다리의 한 예를 보여주고 있다. 이 사다리에서 점선은 가로 막대가 없음을, 굵은 가로 실선은 옆으로 건너갈 수 있는 가로 막대가 있음을 나타내고 있다. 따라서 위에 제시된 사다리를 타면 그 최종 도달된 순서는 왼쪽으로부터 A, C, G, B, E, D, J, F, I, H 가 된다. 사다리 타기는 세로 막대를 타고 내..

Tistory

[C++] 백준 14888 - 연산자 끼워넣기 (백트래킹 방식)

문제 이해 단계 N개의 수로 이루어진 수열 A1, A2,..., AN이 주어진다. 또, 수와 수 사이에 끼워 넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다. 우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다. 예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다. 1+2+3-4×5÷6 1÷2+3+4-5×6 1+2÷3×4-5+6 1÷2×3-4+5+6 식의 계산은 ..

Tistory

[C++] 백준 22943 - 수

문제 이해 단계 0부터 9까지 K가지의 숫자를 한 번씩만 사용하여 만들 수 있는 수 중 아래 조건을 모두 만족하는 수들의 개수를 구해보자. 단, 수의 맨 앞에는 0이 올 수 없다. 즉, 0143는 불가능하다. 서로 다른 두 개의 소수의 합으로 나타낼 수 있는 경우 M으로 나누어 떨어지지 않을때까지 나눈 수가 두 개의 소수의 곱인 경우, 이 때, 두 개의 소수가 같아도 된다. 예를 들어, K가 1이고 M이 11인 경우로 생각해 보자. 한자리 수 중 1번 조건을 만족하는 수는 5, 7, 8, 9이고 2번 조건을 만족하는 수는 4, 6, 9가 있다. 이 두 개의 조건을 둘 다 만족하는 수는 9이므로 이 경우에는 1개이다. 입력 첫 번째 줄에 K와 M 주어진다. 출력 2가지 조건을 만족하는 수의 개수를 출력한다..

Tistory

[C++] 백준 16927 - 배열 돌리기 2

문제 이해 단계 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5] 예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다. 1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2 7 8 2 9 8 7 6 → 5 6 8 2 → 1 7 6 3 5 4 3 2 9 ..

Tistory

[C++] 백준 9081 - 단어 맞추기 (2가지 풀이)

문제 이해 단계 BEER라는 단어를 이루는 알파벳들로 만들 수 있는 단어들을 사전 순으로 정렬하게 되면 BEER BERE BREE EBER EBRE EEBR EERB ERBE EREB RBEE REBE REEB 와 같이 된다. 이러한 순서에서 BEER 다음에 오는 단어는 BERE가 된다. 이와 같이 단어를 주면 그 단어를 이루는 알파벳들로 만들 수 있는 단어들을 사전 순으로 정렬할 때에 주어진 단어 다음에 나오는 단어를 찾는 프로그램을 작성하시오. 입력 입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알파벳으로 이루어진다. 단어의 길이는 100을 넘지 않..

Tistory

[C++] 백준 16935 - 배열 돌리기 3

문제 이해 단계 문제 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → 7 4 6 2 3 1 7 4 6 2 3 1 → 1 8 3 4 2 9 9 2 3 6 1 5 → 7 2 6 9 8 2 4 2 9 3 1 8 → 1 6 2 9 8 4 2번 연산은 배열을 좌우 반전시키는 연산이다. 1 6 2 9 8 4 → 4 8 9 2 6 1 7 2 6 9 8 2 → 2 8 9 6 2 7 1 8 3 4 2 9 → 9 2 4 3 8 1 7 4 6 2 3 1 → 1 3 2 6 4 7 9 2 3 6 1 5 → 5 1 6..

Tistory

[C++] 백준 10703 - 유성

문제 이해 단계 문제 작고 특이한 모양의 유성 사진이 인터넷에 올라왔다. 사진에는 매우 높은 곳에서 떨어지고 있는 유성이 허공에 찍혀 있었다. 유성이 떨어지고 난 뒤의 사진도 있었지만 안타깝게도 소실 돼버려 이를 복원해야 한다. 유성 사진을 문자의 배열로 단순화시켜 표기할 것이다. 문자 'X'는 유성의 일부를, 문자 '#'는 땅의 일부를, 그리고 나머지(공기)는 문자 '.'로 이루어져 있다. 모든 유성 조각들은 연결되어 있다. 즉, 두 부분 유성이 존재한다면, 한쪽에서 유성 조각을 통해 상하좌우로 이동해서 다른 부분 유성에 도달할 수 있다. 땅 또한 같은 방식으로 연결되어 있다. 주어진 사진에서 유성은 땅보다 위에 있다. 정확히 말하자면, 적어도 한 줄 이상의 공기('.')가 존재하며, 유성은 그 보다 ..

Tistory

[C++] 백준 17128 - 소가 정보섬에 올라온 이유

문제 이해 단계 소 N마리가 정보섬에 올라왔다! 소들은 정보섬 1층 앞마당에서 A1, A2, A3,..., AN, A1의 순서대로 동그랗게 앉아 쉬고 있다. 각 소들에게는 품질 점수 Ai가 적힌 스티커가 붙어 있다. 욱제는 소 떼 옆에서 효빈이가 계산해 둔 어떤 계산 식을 발견했는데, 그것은 아래와 같다. 풀어쓰자면, 원형으로 둘러앉은 소들에 대해서, 연속한 네 마리 소들의 품질 점수를 곱한 값을 모두 (정확히 한 번씩) 더한 것이다. 욱제는 효빈이가 학교를 떠나지 못하도록 심술부릴 작정이다. 욱제는 총 Q번에 걸쳐 어떤 i번째 소를 선택할 것이다. 그러고는 Ai가 적힌 스티커를 떼어내고, Ai*(-1)이 적힌 스티커를 붙일 작정이다. 그러면 효빈이는 Q번에 걸쳐서 S를 다시 계산해야 한다. 한 번 바꾼..

Tistory

[C++] 백준 21925 - 짝수 팰린드롬 ( 스택 풀이 )

문제 이해 단계 길이가 N인 수열 A이 있다. 이 수열을 여러 개의 짝수 팰린드롬으로 나누려고 한다. 짝수 팰린드롬은 수열의 길이가 짝수이고 수열을 뒤집어도 뒤집기 전 수열과 동일한 것을 의미한다. 예를 들어, 수열 [12,12]은 짝수 팰린드롬이고, 수열 [12,21]은 뒤집으면 [21,12]로 뒤집기 전 수열과 달라서 짝수 팰린드롬이 아니다. 수열을 나누었을 때 모든 부분 수열은 짝수 팰린드롬이어야 한다. 짝수 팰린드롬을 최대한 많이 있도록 나누려고 할 때 짝수 팰린드롬은 최대 몇 개가 있는지 구해보자. 입력 첫 번째 줄에 수열 A의 길이가 N이 주어진다. N은 항상 짝수이다. (1≤N≤5,000) 다음 줄에는 총 N개의 수열 A 원소 Ai가 주어진다. (1≤Ai≤10,000) 출력 짝수 팰린드롬은 ..

Tistory

[C++] 백준 2447 - 별 찍기 - 10

문제 이해 단계 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27,...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다. *** * * *** N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3) ×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다. 입력 첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 \(3^k\)이며, 이때 1 ≤ k < 8이다. 출력 첫째 줄부터 N번째 줄까지 별을 출력한다. 예제 입력 1 27 예제 출력 1 *****************..

Tistory

[Unity 3D] 최적화 관점에서 보는 클래스와 구조체 차이(Class vs Struct)

클래스(Class)와 구조체(Struct)의 차이 Class 참조 형식으로 Heap 영역에 할당 제거될 때 가비지 컬렉터(Garbage Collector)에 의해 수거됨 상속 가능 Struct 값 타입이고 스택(Stack)에 할당됨 함수에서 나갈 때 CLI에 의해 수거됨 상속이 불가능함 프로파일러로 분석 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Assign_Test : MonoBehaviour { public bool triggerClass; public bool triggerStruct; // 클래스 class Test_class { int a; }; // 구조체 struct Te..

Tistory

[C++] 백준 21608 - 상어 초등학교 (정렬 활용 풀이)

문제 이해 단계 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호가 매겨져 있고, (r, c)는 r행 c열을 의미한다. 교실의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 선생님은 학생의 순서를 정했고, 각 학생이 좋아하는 학생 4명도 모두 조사했다. 이제 다음과 같은 규칙을 이용해 정해진 순서대로 학생의 자리를 정하려고 한다. 한 칸에는 학생 한 명의 자리만 있을 수 있고, |r1 - r2| + |c1 - c2| = 1을 만족하는 두 칸이 (r1, c1)과 (r2, c2)를 인접하다고 한다. 비어있는 칸 중에서 좋아하는 학..

Tistory

[Unity 3D] 텍스트 최적화를 위한 2가지 사항 정리

텍스트 아웃라인/쉐도우(Outline/Shadow) 텍스트에 아무런 효과를 안 줬을 때(Outline X, Shadow X) → vertex : 344 아웃라인/쉐도우 (Outline / Shadow) 아웃라인과 쉐도우는 vertex 낭비가 굉장히 심함 아웃라인 > 쉐도우 (아웃라인이 쉐도우보다 낭비가 더 심함) 아웃라인을 적용해 줬을 때 → vertex 2500개 쉐도우 적용해 줬을 때 → vertex 1000개 모바일 게임에서는 한 장면에 vertex의 개수가 10만 개가 넘어가면 유니티 엔진 자체에서 경고가 무수히 날아옴 굉장히 유의해서 사용해야 함 vertex 개수는 항상 신경 써줘야 함 BestFit 입력한 텍스트가 Rect Transfrom(설정해 둔 사각형)에 다 들어올 수 있도록 글자 사이..

Tistory

[C++] 백준 22859 - HTML 파싱

문제 이해 단계 웹 크롤링을 하여 HTML을 가공하는 프로그램을 만들려고 한다. HTML은 아래와 같이 구성되어 있다. (문제 일반화를 위해 실제 HTML 소스 코드 및 태그가 실제 존재하는 것과 다를 수 있다.) paragraph 1 paragraph 2 Italic Tag paragraph 3 Bold Tag end. paragraph 4 paragraph 5 Italic Tag 2 end. HTML에는 여는 태그 로 시작하여 닫는 태그 로 항상 끝나고, , 사이에 하나의 문단이 존재하고, , 사이에 하나의 문장이 존재한다. , 사이에는 main 태그, div 태그, p 태그를 제외한 다른 태그들이 존재할 수도 있다. 위 예시에서 title_name_1, title_name_2 부분은 div 태그 안..

Tistory

[Unity 3D] 캔버스 최적화를 통한 퍼포먼스 향상(Text 예시)

Canvas 최적화 프로파일러로 분석 Text를 변경하는 스크립트를 통해 프로파일러로 퍼포먼스 분석 PostLateUpdate.PlayerUpdate를 보면 Canvas에서 그려지는 작업이 발생하는 것을 알 수 있다. → 텍스트를 변경하는 작업은 Canvas에서 발생 버텍스 버퍼 유니티의 UI는 화면에 그려질 때 버텍스 버퍼(Vertex Buffer)로 그려짐 Scene → WireFrame으로 보면 버텍스 버퍼를 볼 수 있음 버텍스는 하나의 선(line) 단위 해당 그림에서는 총 28개의 버텍스가 존재 버텍스 버퍼는 Canvas에 위치함 그려지는 과정 버텍스 버퍼의 변형이 발생 해당 버텍스 버퍼를 리빌드(Rebuild) 최적화가 필요한 이유 하나의 UI가 변경이 일어나면 그 Canvas 전체를 리빌드 ..

Tistory

[C++] 편리한 문자열 분리(split) 방법(istringstream vs stringstream)

백준에서 알고리즘 문제를 풀다 보면 띄어쓰기나 특정 단어를 기준으로 분리해야 할 때가 있다. 나도 그런 일이 잦아서 사용하기 편한 라이브러리 함수들을 쓰려고 하는데, 이상하게 Split 관련 부분은 항상 헷갈려서 검색을 하게 된다. 그래서 이번 기회에 블로그에 확실히 정리하려고 한다. istringstream #include 헤더를 포함시키면 사용 가능 문자열 format을 파싱(parsing)할 때 쓰는 클래스이다. 문자열에서 필요한 값을 추출하고 공백과 '\n'을 무시한다. 코딩 테스트에서 활용 #include #include using namespace std; int main(){ string str1 = "This is Test"; string str2 = "AB/CDE/DFDG/ASCD"; /..

Tistory

[Unity 3D] 프로파일러(Profiler)로 퍼포먼스 스파크(Performance spark) 현상 알아보기

프로파일러 유니티 엔진에서 제공해 주는 유니티에서 개발하고 있는 앱을 분석할 수 있는 툴 매 프레임마다 구체적인 퍼포먼스를 분석할 수 있음 게임의 최적화를 위해 사용 Deep Profile을 통해 정밀 분석 가능 어떤 모드로 분석을 하는 것은 자유지만 필자는 Hierarchy로 보는 게 편해서 해당 모드로 분석 해당 상태에서 게임을 시작하면 분석 차트가 흘러나옴. Hierarchy EditorLoop : 에디터 상에서만 사용되는 퍼포먼스 최적화 측면에서는 전혀 고려하지 않아도 됨 PlayerLoop : 프로그래머가 직접 조작하는 부분들 최적화 측면에서 고려해야 하는 부분 해당 부분을 분석해야 함 프로파일러 분석하는 법 오브젝트를 회전시키는 스크립트가 아래처럼 존재한다. 해당 스크립트는 Update 함수에..

Tistory

[C++] 백준 22856 - 트리 순회

문제 이해 단계 노드가 N개인 이진트리가 있다. 트리를 중위 순회와 유사하게 순회하려고 한다. 이를 유사 중위 순회라고 하자. 순회의 시작은 트리의 루트이고 순회의 끝은 중위 순회할 때 마지막 노드이다. 이때 루트 노드는 항상 1번 노드이다. 유사 중위 순회는 루트 노드에서 시작하며, 다음과 같이 진행된다. 현재 위치한 노드의 왼쪽 자식 노드가 존재하고 아직 방문하지 않았다면, 왼쪽 자식 노드로 이동한다. 그렇지 않고 현재 위치한 노드의 오른쪽 자식 노드가 존재하고 아직 방문하지 않았다면, 오른쪽 자식 노드로 이동한다. 그렇지 않고 현재 노드가 유사 중위 순회의 끝이라면, 유사 중위 순회를 종료한다. 그렇지 않고 부모 노드가 존재한다면, 부모 노드로 이동한다. 유사 중위 순회를 종료할 때까지 1 ~ 4를..

Tistory

[C++] 백준 2961 - 도영이가 만든 맛있는 음식

문제 이해 단계 문제 도영이는 짜파구리 요리사로 명성을 날렸었다. 이번에는 이전에 없었던 새로운 요리에 도전을 해보려고 한다. 지금 도영이의 앞에는 재료가 N개 있다. 도영이는 각 재료의 신맛 S와 쓴맛 B를 알고 있다. 여러 재료를 이용해서 요리할 때, 그 음식의 신맛은 사용한 재료의 신맛의 곱이고, 쓴맛은 합이다. 시거나 쓴 음식을 좋아하는 사람은 많지 않다. 도영이는 재료를 적절히 섞어서 요리의 신맛과 쓴맛의 차이를 작게 만들려고 한다. 또, 물을 요리라고 할 수는 없기 때문에, 재료는 적어도 하나 사용해야 한다. 재료의 신맛과 쓴맛이 주어졌을 때, 신맛과 쓴맛의 차이가 가장 작은 요리를 만드는 프로그램을 작성하시오. 입력 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에..

Tistory

[Unity 3D] 팝업시스템(2) - 버튼 기능 구현(싱글톤, 델리게이트 활용)

버튼을 누르면 실행될 함수를 만들기 위해 PopUpManager.cs라는 스크립트를 따로 만들 것이다. 해당 스크립트에는 팝업버튼이 해야 하는 기능(팝업 닫기, 왼쪽 버튼 눌렀을 때, 오른쪽 버튼 눌렀을 때 등)으로 구성되어 있다. PopUpManager.cs 기본 설정 - 싱글턴 패턴 public class PopUpManager : MonoBehaviour { // 싱글턴 패턴 ~~~~~~~~~~~~~~~~~~~~~~~~ private static PopUpManager _instance; public static PopUpManager Instance { get { return _instance; } } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ public GameObj..

Tistory

[C++] 백준 20207 - 달력

문제 이해 단계 수현이는 일 년의 날짜가 1일부터 365일로 표시되어 있는 달력을 가지고 있다. 수현이는 너무나도 계획적인 사람이라 올해 일정을 모두 계획해서 달력에 표시해 놨다. 여름이 거의 끝나가자 장마가 시작되었고, 습기로 인해 달력에 표시한 일정이 지워지려고 한다. 지워지는 것을 막고자 수현이는 일정이 있는 곳에만 코팅지를 달력에 붙이려고 한다. 하지만 너무 귀찮았던 나머지, 다음과 같은 규칙을 따르기로 한다. 연속된 두 일자에 각각 일정이 1개 이상 있다면 이를 일정이 연속되었다고 표현한다. 연속된 모든 일정은 하나의 직사각형에 포함되어야 한다. 연속된 일정을 모두 감싸는 가장 작은 직사각형의 크기만큼 코팅지를 오린다. 달력은 다음과 같은 규칙을 따른다. 일정은 시작날짜와 종료날짜를 포함한다. ..

Tistory

[Unity 3D] 팝업시스템(1)- 텍스트 길이에 반응하는 팝업창 구현 및 설명

1. 레이아웃 생성 및 설정 캔버스의 하위 요소로 빈 오브젝트인 max와 그 하위 오브젝트인 popup을 만든다. max와 popup에 Vertical Layout Group 컴포넌트를 추가한다. max - 만들고 있는 팝업의 최대 크기를 결정하기 위해 생성 최대 영역의 크기를 보기 위해 임시로 이미지 삽입 Child Alignment를 Middle Center로 맞춘다. → 팝업 텍스트 가운데 정렬 Control Child Size Width/Height를 체크한다. 하위 요소에 의해서 사이즈가 결정되도록 함. → 텍스트의 길이에 따라 팝업창의 길이를 조절하기 위함 Child Force Expand Width/Height 체크를 해제 PopUp 하위 요소로 팝업 배경을 위한 Image UI(BackGr..

Tistory

[Unity 3D] UI - Layout Element 개념 정리 및 Text에 활용

해당 포스팅은 Layout과 Layout Controller의 개념을 알고 있다는 전제로 하는 설명이기 때문에 모르시는 분은 아래 링크로 가서 먼저 Layout Controller에 대한 개념을 먼저 보시는 것을 추천드립니다. [Unity 3D] UI 레이아웃 개념과 컨트롤러(Layout Controller) 기초 정리 Layout Controller 오브젝트를 일정한 규칙에 따라 배치하는 것 Inspector : 디버그(Debug) 모드 Min Width : 최소한의 너비 Min Height : 최소한의 높이 Preferred Width : 선호되는 너비 Preferred Height : 선호되는 높이 howudong.tistory.com Layout Element Layout Controller 안에..

Tistory

[C++] 백준 2239 - 스도쿠 (그림 설명)

문제 이해 단계 문제 스도쿠는 매우 간단한 숫자 퍼즐이다. 9 ×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3 ×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자. 위 그림은 참 잘도 스도쿠 퍼즐을 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3 ×3짜리 사각형(9개이며, 위에서 색깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다. 하다 만 스도쿠 퍼즐이 주어졌을 때, 마저 끝내는 프로그램을 작성하시오. 입력 9개의 줄에 9개의 숫자로 보드가 입력된다. 아직 숫자가 채워지지 않은 칸에는 0이 주어진다. 출력 9개의 줄에 9개의 숫자로 ..

Tistory

[C++] 백준 16926 - 배열돌리기 1

문제 이해 단계 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] ↓ ↓ ↑ ↑ A[3][1] A[3][2] → A[3][3] → A[3][4] A[3][5] ↓ ↑ A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5] 예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다. 1 2 3 4 2 3 4 8 3 4 8 6 5 6 7 8 1 7 7 6 2 7 8 2 9 8 7 6 → 5 6 8 2 → 1 7 6 3 5 4 3 2 9 ..

Tistory

[Unity 3D] UI 레이아웃 개념과 컨트롤러(Layout Controller) 기초 정리

Layout Controller 오브젝트를 일정한 규칙에 따라 배치하는 것 Inspector : 디버그(Debug) 모드 Min Width : 최소한의 너비 Min Height : 최소한의 높이 Preferred Width : 선호되는 너비 Preferred Height : 선호되는 높이 Flexible Width : 너비가 늘어나는가? Flexible Height : 높이가 늘어나는가? Layout Component 사용하기 색이 다른 이미지 UI 4개를 만들어두고 빈 오브젝트 layout의 하위 오브젝트로 설정 Horizontal Layout Group Vertical Layout Group도 속성이 똑같음. layout 오브젝트에 Horizontal Layout Group 컴포넌트를 추가 위와 같이..

Tistory

[Unity 3D] 패킹(Packing)의 필요성과 두가지 시스템( Legacy, Atlas )

Draw Call(Batches) Batches(Draw Call) : CPU가 GPU에게 렌더링 할 항목(텍스처)들을 미리 알려주는 것 어떤 값을 넘겨주냐에 따라서 Draw Call이 결정 Draw Call 관리가 중요한 이유 Draw Call이 쌓일수록 전체적인 성능이 급격히 저하 모바일은 최대 100개 이하의 Draw Call을 유지해야 함 Draw Call을 줄이기 위해 Packing을 사용 Packing Sprite를 하나로 묶는 것 원하는 텍스처들을 가지고 있는 텍스처 뭉치를 만드는 것 Packing 원리 텍스처 하나를 Draw Call을 보냄 하나의 Draw Call 안에서 두 개의 스프라이트를 Render CPU가 GPU에게 텍스쳐를 요청하는 명령을 한 번만 처리할 수 있게 만듦 → 여러 ..

Tistory

[C++] 백준 15787 - 기차가 어둠을 헤치고 은하수를

문제 이해 단계 N개의 기차가 어둠을 헤치고 은하수를 건너려고 한다. 기차는 20개의 일렬로 된 좌석이 있고, 한 개의 좌석에는 한 명의 사람이 탈 수 있다. 기차의 번호를 1번부터 N번으로 매길 때, 어떠한 기차에 대하여 M개의 명령이 주어진다. 명령의 종류는 4가지로 다음과 같다. 1 i x : i번째 기차에(1 ≤ i ≤ N) x번째 좌석에(1 ≤ x ≤ 20) 사람을 태워라. 이미 사람이 타있다면 , 아무런 행동을 하지 않는다. 2 i x : i번째 기차에 x번째 좌석에 앉은 사람은 하차한다. 만약 아무도 그자리에 앉아있지 않았다면, 아무런 행동을 하지 않는다. 3 i : i번째 기차에 앉아있는 승객들이 모두 한칸씩 뒤로간다. k번째 앉은 사람은 k+1번째로 이동하여 앉는다. 만약 20번째 자리에..

Tistory

[C++] 백준 16719 - ZOAC

문제 이해 단계 문제 2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로운 규칙을 고안해 냈다! 규칙은 이러하다. 아직 보여주지 않은 문자 중 추가했을 때의 문자열이 사전 순으로 가장 앞에 오도록 하는 문자를 보여주는 것이다. 예를 들어 ZOAC를 보여주고 싶다면, A → AC → OAC → ZOAC 순으로 보여주면 된다. 바쁜 성우를 위하여 이 규칙대로 출력해 주는 프로그램을 작성하시오. 입력 첫 번째 줄에 알파벳 대문자로 구성된 문자열이 주어진다. 문자열의 길이는 최대 100자이다. 출력 규칙에 맞게 순서대로 문자열을 출력한다. 예제 입력 1 ZOAC ..

Tistory

[C++] 백준 20164 - 홀수 홀릭 호석

문제 이해 단계 호석이는 짝수랑 홀수 중에서 이니셜이 같은 홀수를 더 좋아한다. 운전을 하던 호석이는 앞차의 번호판이 홀수로 가득할 때 사랑스러움을 느낄 정도이다. 전화번호도 홀수만 있고 싶다. 그렇게 홀수 홀릭에 빠진 호석이는 가지고 있는 수 N을 일련의 연산을 거치면서, 등장하는 숫자들에서 홀수를 최대한 많이 많이 보고 싶다. 하나의 수가 주어졌을 때 호석이는 한 번의 연산에서 다음과 같은 순서를 거친다. 수의 각 자리 숫자 중에서 홀수의 개수를 종이에 적는다. 수가 한 자리이면 더 이상 아무것도 하지 못하고 종료한다. 수가 두 자리이면 2개로 나눠서 합을 구하여 새로운 수로 생각한다. 수가 세 자리 이상이면 임의의 위치에서 끊어서 3개의 수로 분할하고, 3개를 더한 값을 새로운 수로 생각한다. 호석..

Tistory

[C++] 백준 2615 - 오목

문제 이해 단계 오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번,... ,19번의 번호가 붙고 세로줄은 왼쪽에서부터 오른쪽으로 1번, 2번,... 19번의 번호가 붙는다. 위의 그림에서와 같이 같은 색의 바둑알이 연속적으로 다섯 알을 놓이면 그 색이 이기게 된다. 여기서 연속적이란 가로, 세로 또는 대각선 방향 모두를 뜻한다. 즉, 위의 그림은 검은색이 이긴 경우이다. 하지만 여섯 알 이상이 연속적으로 놓인 경우에는 이긴 것이 아니다. 입력으로 바둑판의 어떤 상태가 주어졌을 때, 검은색이 이겼는지, 흰색이 이겼는지 또는 아직 승부가 결정되지 않았는지를 판단하는 프로그램을 작성. ..

Tistory

[Unity 3D] 나인슬라이스(9-Slice)의 사용법과 필요성

9 Slice 이미지를 9조각으로 나누어 영역별로 사이즈를 조절하는 테크닉 Image Type Image 컴포넌트 속성 중 Image Type에서 사용 Sliced와 Tiled에서 사용 9 Slice가 되어있지 않으면 Sliced와 Tiled 사용 불가능 9 Slice 사용 Project에 이미지 원본 파일을 클릭 Inspector에서 Sprite Editor 클릭 아래와 같이 초록색 선으로 9개의 네모 영역을 만든 후, 우측 상단에 Apply 경고 문구가 사라진 것을 확인할 수 있다. 9 Slice를 하면 뭐가 다를까? 그림으로 보는 것이 가장 빠르다. 왼쪽은 Sliced 적용 / 오른쪽은 Simple 이미지이다. Simple은 크기가 바뀔 때마다 전체 이미지 비율이 그에 상응하여 바뀐다. Sliced..

Tistory

[C++] 백준 17276 - 배열 돌리기 ( 덱을 이용한 풀이 )

문제 이해 단계 크기가 n x n인 2차원 정수 배열 X가 있다. (n은 홀수) X를 45 의 배수만큼 시계방향 혹은 반시계방향으로 돌리려고 한다. X를 시계 방향으로 45 돌리면 아래와 같은 연산이 동시에 X에 적용되어야 한다: X의 주 대각선을 ((1,1), (2,2), …, (n, n)) 가운데 열 ((n+1)/2 번째 열)로 옮긴다. X의 가운데 열을 X의 부 대각선으로 ((n, 1), (n-1, 2), …, (1, n)) 옮긴다. X의 부 대각선을 X의 가운데 행 ((n+1)/2번째 행)으로 옮긴다. X의 가운데 행을 X의 주 대각선으로 옮긴다. 위 네 가지 경우 모두 원소의 기존 순서는 유지 되어야 한다. X의 다른 원소의 위치는 변하지 않는다. 반시계 방향으로 45 돌리는 경우도 위와 ..

Tistory

[Unity 3D] Rect Transform 이해하고 응용하기

RectTransform UI 한정에서 사용해서 컴포넌트 Transform을 상속받음 Transform의 속성/기능 사용 가능 UI는 모두 Transform 대신 RectTransform임 RectTransform 속성 UI 좌표계는 스크린과 다르게 한가운데가 (0,0,0)으로 시작 이는 Anchors(앵커)의 디폴트 값이 (0,0,0)이기 때문 → 앵커 값을 변경하면 포지션 값이 달라진다. 포지션은 Pivot(피벗)과 Anchor(앵커)의 영향을 받는다. Rotation, Scale - Transfrom과 같음. 단, Scale에 Z는 존재하지 않음 Pivot(피벗) Rect Transform의 Position은 Anchor을 원점으로 잡고 가운데 Pivot까지의 거리를 측정하여 UI를 배치 Ancho..

Tistory

[C++] 프로그래머스 Level 3 - 섬 연결하기

문제 이해 단계 문제 설명 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다. 제한사항 섬의 개수 n은 1 이상 100 이하입니다. costs의 길이는 ((n-1) * n) / 2이하입니다. 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때..

Tistory

[C++] 프로그래머스 Level 4 - 도둑질

문제 이해 단계 문제 설명 도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다. 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요. 제한사항 이 마을에 있는 집은 3개 이상 1,000,000개 이하입니다. money 배열의 각 원소는 0 이상 1,000 이하인 정수입니다. 입출력 예 입력 - money : [ 1,2,3,1 ] 출력 - 4 집이 원형으로 배치되어 있고, 한 집을 선택하면 양 옆에 있는 집을 선택할 수 없게 된다. 이러한 조건일 때 얻..

Tistory

[C++] 프로그래머스 Level 3 - 등굣길

문제 이해 단계 문제 설명 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = 4, n = 3인 경우입니다. 가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다. 격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어집니다. 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해 주세요. 제한사항 격자의 크기 m, n은 ..

Tistory

[C++] 프로그래머스 Level 3 - N으로 표현

문제 이해 단계 문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현할 수 있는 방법 중 N 사용 횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식에는 괄호와 사칙연산만 가능하며 나누기 연산에서 나머지는 무시합니다. 최솟값이 8보다 크면 -1을 return 합니다. 예제 11 = 22 / 2와 같..

Tistory

[C++] 프로그래머스 Level 3 - 퍼즐 조각 채우기

문제 이해 단계 테이블 위에 놓인 퍼즐 조각을 게임 보드의 빈 공간에 적절히 올려놓으려 합니다. 게임 보드와 테이블은 모두 각 칸이 1x1 크기인 정사각 격자 모양입니다. 이때, 다음 규칙에 따라 테이블 위에 놓인 퍼즐 조각을 게임 보드의 빈칸에 채우면 됩니다. 조각은 한 번에 하나씩 채워 넣습니다. 조각을 회전시킬 수 있습니다. 조각을 뒤집을 수는 없습니다. 게임 보드에 새로 채워 넣은 퍼즐 조각과 인접한 칸이 비어있으면 안 됩니다. 다음은 퍼즐 조각을 채우는 예시입니다. 위 그림에서 왼쪽은 현재 게임 보드의 상태를, 오른쪽은 테이블 위에 놓인 퍼즐 조각들을 나타냅니다. 테이블 위에 놓인 퍼즐 조각들 또한 마찬가지로 [상, 하, 좌, 우]로 인접해 붙어있는 경우는 없으며, 흰 칸은 퍼즐이 놓이지 않은 ..

Tistory

[C++] 프로그래머스 Level 3 - 여행 경로

문제 이해 단계 문제 설명 주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 "ICN" 공항에서 출발합니다. 항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해 주세요. 제한사항 모든 공항은 알파벳 대문자 3글자로 이루어집니다. 주어진 공항 수는 3개 이상 10,000개 이하입니다. tickets의 각 행 [a, b]는 a 공항에서 b 공항으로 가는 항공권이 있다는 의미입니다. 주어진 항공권은 모두 사용해야 합니다. 만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다. 모든 도시를 방문할 수 없는 경우는 주어지지 않습니다. 입출력 예 설명 예제 #1 ["I..

Tistory

[Unity 3D] Image 와 Text 컴포넌트 및 프로퍼티 의미와 활용법 정리

Image Canvas Renderer : 상위 Canvas의 UI 요소라는 뜻 Source Image 화면에 나타날 이미지 Sprite 형식의 텍스쳐 타입(Texture Type)만 넣을 수 있음 다른 타입은 넣을 수 없다. Raycast Target 버튼 클릭 같은 터치 이벤트가 해당 UI에 의해 가려질 수 있는가를 설정 뒤에 있는 버튼이 앞에 Image에 가려져 있다고 가정 Raycast Target 체크 → Raycast가 이미지 통과 못함(버튼 클릭 안됨) Raycast Traget 체크 X → Raycast 이미지 통과(버튼 클릭) Image Type Simple : Sprite를 Rect 크기에 따라 그대로 넣는다. Sliced : 스프라이트를 9개의 영역으로 나누어 각자 다른 방식으로 리사..

Tistory

[Unity 3D] 캔버스(Canvas)와 UI 기본 개념과 자주 쓰는 옵션 정리

UI UI Component를 생성하면 Canvas, EventSystem도 같이 생성됨 UI 가 화면에 나타나기까지의 과정 3D 렌더링 시스템에서 Vertex(정점)가 Vertex Buffer에 들어감 Vertex Buffer : 렌더링에 사용할 Vertex를 모아놓은 버퍼 Vertex(정점) : 3D 모델링의 가장 기본 단위 정점들이 도형(Polygon)을 이루게 됨 Polygon들이 모여 하나의 모델을 이루게 됨 Canvas 스크린과 매칭되는 UI 출력 영역(도화지) Vertex Buffer가 위치하는 곳 UI가 Canvas의 자식요소여야 볼 수 있음 UI들의 Vertex(정점)들은 사실상 UI가 아닌 Canvas에 저장됨 Canvas Render Mode Screen Space - Overlay ..

Tistory

[Unity 3D] 에셋(Asset) 호출 및 적용, 그리고 생성

에셋 파일은 같은 프로젝트 내에서 GUID로 식별된다. 뿐만 아니라 이 GUID를 이용하여 에셋 파일을 호출하고, 조작하고, 생성하는 등 여러 가지 작업을 한다. GUID에 대해서는 예전에 포스팅해둔 글을 밑에 넣어둔다. https://howudong.tistory.com/153 [Unity 3D] 유니티 에셋(Asset)의 식별되는 원리 유니티 에셋이란? 유니티 에셋은 게임 제작에 필요한 모든 요소들을 말한다. 3D 모델, 텍스쳐 이미지, 사운드, 파티클 효과, 유틸리티 등을 모두 유니티에서는 에셋이라고 부른다. 유니티 에셋 내 howudong.tistory.com 유니티 에셋 호출(불러오기) using UnityEditor; public class TestEditWindow : EditorWindow..

Tistory

[Unity 3D] 유니티 에셋(Asset)의 식별되는 원리

유니티 에셋이란? 유니티 에셋은 게임 제작에 필요한 모든 요소들을 말한다. 3D 모델, 텍스쳐 이미지, 사운드, 파티클 효과, 유틸리티 등을 모두 유니티에서는 에셋이라고 부른다. 유니티 에셋 내부 유니티 에셋은 무엇으로 이루어져 있을까? 한번 직접 프로젝트 폴더를 열어 알아보자. 에셋 폴더에 있는 Scenes.meta 파일을 텍스트 편집기로 열어본 결과이다. 여러 개의 설정 값들이 적혀있는 것을 확인할 수 있다. 여기서 핵심은 guid라고 적힌 값이다. 유니티에서는 guid를 통해 에셋들을 식별한다. GUID GUID는 유니티에서 에셋들을 구분하기 위해서 주어진 고유한 값이다. 같은 프로젝트 내에서는 고유한 값으로 존재한다고 보면 된다. 즉, 다른 프로젝트라면 같은 GUID 값이 존재할 수 있다는 말이다..

Tistory

[Unity 3D] 에디터 창(Editor Window)와 인스펙터(Inspector) 연결하기

목표 https://howudong.tistory.com/149 [Unity 3D] GUI를 이용한 인스펙터(Inspector) 커스터마이징 목표 오브젝트에 스크립트를 넣어 인스펙터 뷰를 커스터마이징 직렬화(Serialization) - 해당 필드를 유니티가 인식할 수 있는 상태로 만드는 것 - 유니티가 처리할 수 있는 형태로 만드는 것 - Inspect howudong.tistory.com 해당 포스팅에서 했던 GUI를 이용한 인스펙터 커스터마이징을 응용하여, 자신이 만든 에디터 창(Editor Window)과 인스펙터(Inspector)를 연결하겠다. 연결한다는 말은, 에디터 창에서 프로퍼티의 값을 조절하면 인스펙터에도 적용되고, 그 반대도 적용되는 것을 말한다. 프로퍼티 값 초기화(가져오기/불러오기..

Tistory

[C++] 프로그래머스 Level 2 - 큰 수 만들기

문제 이해 단계 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24]를 만들 수 있습니다. 이 중 가장 큰 숫자는 94입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 2자리 이상, 1,000,000자리 이하인 숫자입니다. k는 1 이상 number의 자릿수 미만인 자연수입니다. 입출력 예 num k return "1924" 2 "94" "1..

Tistory

[Unity 3D] GUI를 이용한 인스펙터(Inspector) 커스터마이징

목표 오브젝트에 스크립트를 넣어 인스펙터 뷰를 커스터마이징 직렬화(Serialization) - 해당 필드를 유니티가 인식할 수 있는 상태로 만드는 것 - 유니티가 처리할 수 있는 형태로 만드는 것 - Inspect를 조작하기 위해선 직렬화는 필수적인 과정 -> 유니티가 직렬화할 수 있는 오브젝트를 만들어야 한다. CustomEditor와 Editor 우선 커스터마이징할 스크립트[CustomScript]를 작성한다. public class CustomScript : MonoBehaviour { public GameObject otherObject; public string myName; public int myHp; } 커스터마이징 에디터 스크립트[CustomEditorTest]를 CustomScript..

Tistory

[Unity 3D] GUI 에서의 Event의 역할 및 사용

Event OnGUI()를 호출하는 주체(OnGUI 보다 Low-Level) - 사용자와의 입력과 상호작용 - 트리거들을 공통적으로 처리하는 예약된 함수들이 정의되어 있다 - 효율성을 위해 OnGUI() 내부 코드와 현재 Event의 관계 여부에 따라 무시할 수 있음 1. 현재 이벤트가 드로잉이 아닌데, 드로잉 관련 코드를 만나면 그 코드를 무시 2. MouseClick 이벤트로 OnGUI()가 호출되면 해당 흐름에서는 Drawing 수행 코드 무시 Event 종류 Event.current: 현재 OnGUI()를 호출하게 된 Event Layout Event: Repaint 전 GUI들의 배치 값 관련 수집 이벤트 유니티 상단에 MyTool/OpenTool을 눌러 생성된 창 위에 마우스를 올리고 클릭, ..

Tistory

[Unity 3D] GUI Content 와 GUI Style 개념과 사용법 정리

GUI Content '무엇을 그릴까?'에 대한 클래스 아래와 같이 GUIContent를 생성하여 사용한다. private void OnGUI() { var myContent = new GUIContent(); //GUIContent 생성 myContent.text = "textText"; myContent.image = EditorGUIUtility.FindTexture("AvatarController.Layer"); EditorGUILayout.LabelField(myContent); // myContent Label 생성 myContent.tooltip = "this is ToolTip"; // 마우스 위에 대면 나오는 거 GUILayout.Button(myContent); } myContent에 ..

Tistory

[Unity 3D] GUI 레이아웃 시스템(Layout System) 이해하고 사용하기

GUI 레이아웃 시스템을 이해함으로써, Layout을 좀 더 세밀하게 다룰 수 있다. 예를 들어, EditorGUILayout.Label() 함수를 사용하여 여러 Label을 GUI로 만들면 세로로 Label들이 배치될 것이다. 하지만 LayoutSystem을 이해하고 지금부터 배우는 새로운 함수를 사용하면 좀 더 복잡한 배치가 가능해진다. 가로/세로 배치 // Layout을 가로로 배치한다. EditorGUILayout.BeginHorizontal(); { .. 원하는 GUI 배치 내용물 입력 } EditorGUILayout.EndHorizontal(); // Layout을 세로로 배치한다. EditorGUILayout.BeginVertical(); { .. 원하는 GUI 배치 내용물 입력 } Edit..

Tistory

[Unity 3D] 많이 사용되는 GUI 요소 그룹 사용법 정리

EditorGUILayout 함수 using UnityEngine; using UnityEditor; public class TestEditorWindow : EditorWindow { int intValue; float floatValue; Color colorValue; Gradient gradientValue = new Gradient(); Rect rectValue; Vector3 vector3Value; Vector3Int vectorInt3Value; UnityEngine.Object objectValue; string passwordValue; string tagValue; UnityEngine.ParticleSystemCollisionType enumValue; private void On..

Tistory

[Unity 3D] GUI 4가지 생성 방식과 방식 간의 차이 정리

스크립트 기본 준비 기본적으로 GUI를 사용하기 위해서는 2가지 사전 준비가 필요하다. 1. 스크립트에 UnityEditor를 사용함을 명시한다. 2. 해당 클래스의 부모를 EditWindow로 지정한다. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; // UnityEditor 사용 public class TestEditorWindow : EditorWindow // EditorWindow를 부모로 지정 { } 유니티 Scene에 새로운 스크립트 TestEditorWindow를 만들어 위와 같이 수정한다. 새로운 윈도우 만들기 GUI를 만드려면 그 GUI를 그리기 위한 도화지(..

Tistory

[네트워크 보안] 커버로스(Kerberos) 인증 프로토콜 개념 및 특징 정리

개요 대칭키 암호를 이용하는 하나의 인증체계 장점 : 공개키 기반구조(PKI)가 요구되지 않는다. LAN과 같은 소규모 네트워크에서 사용할 수 있도록 설계 인증 및 비밀성과 무결성이 요구되는 세션키를 생성하기 위해 이용 원칙적으로 어떤 대칭암호든 커버로스로 이용 가능 → 하지만, 오늘날에는 커버로스 대신 DES가 쓰임 대칭키를 기반을 하지만 N명에 사용자에 대해 오직 N개의 키만 필요 기존 대칭키 기반 인증체계에서는 N명의 사용자가 있으면 \(N(N-1)/2 \approx N^2\) 의 키 필요 → 대칭키 기반 인증에서는 이용자와 키의 개수는 정비례 관계가 아님 커버로스는 가능한 이유? 제3의 신뢰성 있는 기관(TTP)에 의존하기 때문 커버로스 TTP는 시스템 보안의 핵심 구성요소 → 반드시 보호 필요 ..

Tistory

[소프트웨어공학] 방식 별 프로젝트 일정 관리 및 애자일 계획 수립 접근법 정리

프로젝트 일정관리 다음의 항목들을 결정 프로젝트 내용을 분리된 작업들로 조직하는 방법 각각의 작업들이 실행되는 시점 각각의 작업들을 실행할 방법 다음의 업무를 수행 각각의 작업을 완료하는데 필요한 시간과 노력 추정 작업 수행 인원 제안 각 작업을 완료하는데 필요한 하드웨어와 소프트웨어 자원들 추정 → 초기 프로젝트 일정은 프로젝트 시동단계에서 생성되며, 자주 갱신되고 수정됨 계획 주도 및 애자일 프로세스에서의 프로젝트 일정 두 경우 다 초기 프로젝트 일정 필요 계획 주도 프로젝트 프로젝트 관련 업무를 분리된 작업들로 나누고 각각의 작업을 완료하는데 필요한 시간 추정 애자일 프로젝트 계획 주도 프로젝트보다는 덜 상세한 내용 프로젝트 주요 단계들이 언제 완료될지 식별하는 전반적인 일정이 있어야 함. 프로젝트..

Tistory

[소프트웨어공학] 소프트웨어 추정치 추정 기법과 COCOMO 모델 분석

추정 기법 조직은 소프트웨어 노력과 비용 추정치를 만들어야 함 두 종류의 기법을 사용하여 추정치를 구함 경험 기반 기법 관리자의 과거 프로젝트 경험과 애플리케이션 도메인을 근거로 노력 요구사항을 추정 알고리즘 비용 모델 프로젝트 노력을 계산하기 위해 크기와 같은 제품 속성의 추정치, 프로세스 특성, 참여한 직원들의 경험을 근거로 하는 공식적 접근법 사용 추정 불확실성 경험 기반 접근법 관리자의 경험, 이 프로젝트에서 소프트웨어 개발에 관련된 활동들을 위해 투입된 실제 노력에 의존 전형적으로 프로젝트에서 생성되는 산출물들과 개발될 여러 소프트웨어 컴포넌트 또는 시스템 식별 스프레드 시트로 문서화, 개별적 추정, 필요한 총 노력 계산 그룹 내의 멤버들에게 자신의 추정치를 설명할 것을 요청하는 것은 도움이 됨..

Tistory

[소프트웨어공학] 단계별 프로젝트 계획 수립 전략과 계획 주도 개발

프로젝트 계획 수립 프로젝트 계획 수립은 프로젝트 생명 주기의 세 단계에서 일어남 소프트웨어 프로젝트 관리자의 가장 중요한 업무 중 하나 작업들을 작은 작업들로 나눔 나눈 작업들을 프로젝트 팀 멤버들에게 할당 발생할 수 있는 문제들에 대해 예측 문제들에 대한 잠정적인 해결책 준비 프로젝트 계획 작업이 진행될 방법을 보이고 프로젝트의 진척사항을 평가하기 위해 사용 프로젝트를 시작하면서 생성하고 프로젝트가 진행되면서 수정 프로젝트 계획 수립은 프로젝트 생명 주기의 세 단계에서 일어남 제안 단계 소프트웨어 시스템을 개발 또는 공급하는 계약을 수주하기 위해 응찰할 때 작업 완수를 위한 자원을 가지고 있는지 판단하는 것을 돕는다 언급해야 하는 가격 측정 계획을 위해 필요 프로젝트 시작 단계 누가 프로젝트에서 작업..

Tistory

[소프트웨어공학] 프로젝트 관리를 위한 리스크 프로세스 및 인간 관리

프로젝트 관리 소프트웨어 공학의 본질적인 부분 전문적인 소프트웨어 공학은 항상 조직의 예사과 일정에 대한 제약조건의 영향을 받음 프로젝트 관리자의 임무 제약조건을 만족하고 극복하면서 고품질의 소프트웨어를 인도하도록 보장 프로젝트 주요 목표 약속된 기한까지 고객에게 소프트웨어 인도 전체 비용을 예산 범위 이내에서 지출 고객의 기대치를 충족하는 소프트웨어 인도 일관적이고 잘 운영되는 개발팀 유지 소프트웨어 관리가 어려운 점 소프트웨어 제품은 형체가 없음 관리자는 개발 중인 제품에 대한 진척사항을 볼 수 없음 대형 소프트웨어 프로젝트는 종종 일회성 프로젝트임 대형 프로젝트는 개발되는 환경이 다른 것들과는 어느 정도 다르기 때문에 고유함 소프트웨어 프로세스는 변동이 심하고 조직마다 다름 소프트웨어 기업들은 완전..

1 2 3 4 5