오아시스 재결합링크: http://www.acmicpc.net/problem/3015 문제오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다.이 역사적인 순간을 맞이하기 위해 줄에서 기다리고 있던 백준이는 갑자기 자기가 볼 수 있는 사람의 수가 궁금해졌다.두 사람 A와 B가 서로 볼 수 있으려면, 두 사람 사이에 A 또는 B보다 키가 큰 사람이 없어야 한다.줄에 서 있는 사람의 키가 주어졌을 때, 서로 볼 수 있는 쌍의 수를 구하는 프로그램을 작성하시오.문제 접근A와 B 사이에는 같거나 작은 값들만 존재해야 한다.2 4 1 2 2 5 1의 경우 총 10개의 쌍이 존재한다.(2,4), (4,1), (4,2), (4,2), (4,5), (1,2), (2,2), (2,5), (2,5), (5,1)풀이..
Programming
옥상 정원 꾸미기https://www.acmicpc.net/problem/6198 문제도시에는 N개의 빌딩이 있다.빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다.i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으로만 볼 수 있다.i번째 빌딩 관리인이 볼 수 있는 다른 빌딩의 옥상 정원은 i+1, i+2, .... , N이다.그런데 자신이 위치한 빌딩보다 높거나 같은 빌딩이 있으면 그 다음에 있는 모든 빌딩의 옥상은 보지 못한다.예) N=6, H = {10, 3, 7, 4, 12, 2}인 경우 = = = = - = = = = -> 관리인이 보는 방향 = - =..
C++ 템플릿과 STL 컨테이너템플릿(Template) 기본 개념C++에서의 템플릿은 코드의 재사용성을 높이기 위한 강력한 도구이다.템플릿은 함수나 클래스를 정의할 때 특정한 자료형에 의존하지 않고 일반적으로 사용할 수 있도록 만들어준다.// 예시: 템플릿 함수template T add(T a, T b) { return a + b;}위의 예시에서 typename T는 템플릿 매개변수로, 함수를 호출할 때 실제 자료형으로 대체된다.int result1 = add(3, 5); // add(3, 5)와 동일float result2 = add(3.14, 2.71); // add(3.14, 2.71)와 동일템플릿 함수 사용 예시// myMath.htemplate T add(T a, T b) { ..
C++ Map에 대한 이해 맵(Map)이란? 맵은 키와 값을 저장하는 데이터 구조로, 키와 값의 쌍을 저장합니다. 여러 가지 특징을 갖고 있으며, 주로 중복되지 않는 키를 통해 값을 찾는 데 사용된다. 키와 값의 쌍을 저장한다. 키는 중복될 수 없다. C++ 맵은 자동 정렬되는 컨테이너이다. (키를 기준으로 정렬) 이진 탐색 트리(binary search tree) 기반으로 구현되어 있어 검색 속도가 빠르다. 맵의 사용 예시 std::map simpleScoreMap; simpleScoreMap.insert(std::pair("Coco", 100)); simpleScoreMap.insert(std::pair("Mocha", 50)); simpleScoreMap["Mocha"] = 0; std::pair ..
1. 특징 어떤 자료형도 넣을 수 있는 동적 배열 원시 자료형(primitive data) 클래스 포인터 모든 요소가 연속된 메모리 공간에 위치 자동으로 메모리를 관리 임의의 요소에 접근 가능 (인덱스 사용 가능) vector는 operator[]를 사용할 수 있지만, STL 컨테이너를 순회할 때는 반복자(iterator)를 사용하는 것이 표준 방식 2. [장점] 순서에 상관없이 요소에 임의적 접근 가능 제일 마지막 위치의 요소를 빠르게 삽입 및 삭제 가능 (메모리 재할당이 없을 시) 3. [단점] 중간에 요소 삽입 및 삭제는 느리다. 재할당 및 요소 복사에 드는 비용이 크다. 4. 벡터 변수 생성 방법 빈 벡터의 생성 // std::vector std::vector scores; std::vector ..
1. 종류 벡터 (Vector) 맵 (Map) 셋 (Set) 스택 (Stack) 큐 (Queue) 리스트 (List) 덱 (Deque) 2. STL 컨테이너의 목적 템플릿 기반 모든 컨테이너에 적용되는 표준 인터페이스 std 알고리즘은 많은 컨테이너에서 작동한다. 템플릿 프로그래밍 기반 메모리 자동 관리 3. 모든 컨테이너에 같은 인터페이스가 적용되는 것은 이상하다. 극단적으로 OOP를 추구한 사례에 해당한다. vector와 list의 push_back이 이상하다. 4. 메모리 단편화 빈번한 메모리 재할당은 메모리 단편화를 초래한다. 메모리를 내부적으로 100번을 재할당하든 뭐든 강제하지 않는다. 가상 메모리를 지원하지 않는 플랫폼에서 프로그램을 실행할 때 문제가 생긴다. 메모리 단편화 때문에 애플리케이..
적절한 예외처리 예외상황: 컨트롤 할 수 없는 상황 예외 안정성: 예외가 났지만 나기 전 상황으로 무사히 돌아가야 한다. → 원래 있었던 올바른 상태로 복구가 되어야 함. 1. 유효성 검사/예외는 오직 경계에서만 하기 밖에서 오는 데이터를 제어할 수 없다. (파일을 읽고 있었는데 지워지거나, 데이터를 요청했는데 NULL이 오거나 등의 사유) → 외부에서 들어오는 웹 요청, 파일 읽기/쓰기, 외부 라이브러리 2. 시스템에 들어온 데이터는 모두 올바르다고 간주할 것. assert를 사용하여 개발 중 문제를 잡아내고 고칠 것. assert → 디버그 중 발견할 수 있도록 함. 3. 예외 상황이 발생할 때는 NULL을 능동적으로 반한할 것. 기본적으로 함수가 NULL을 반환하거나 받는 일이 없어야 한다. 만약 ..
1. 예외 처리 사용에 대한 주의 남용해서는 안 된다. 대부분의 예외는 불필요하다. (생성자의 경우에는 유용) 2. 예외를 사용해야 하는 상황 나 이외의 문제로 발생하는 예외이기 때문에 control 할 수 없는 경우 3. 사람의 사고 방식은 선형적 사람은 순서대로 읽는다. 여러 문제를 한 번에 처리하려고 하면 필연적으로 실수가 생긴다. 4. 언어 자체적으로 주는 예외는 없다. 프로그래머가 직접 만든 것. 표준 라이브러리에서 예외를 던져주기는 한다. (std::exception 클래스를 상속받아 사용) 5. 예외상황이 아닌 예외 상황 범위(range) 이탈 #include int main() { std::string catName = "Coco" try { char ch = myCatName.at(5) ..