목록분류 전체보기 (17)
주니어 개발자의 대나무숲
BOJ 13414 수강 신청 (https://www.acmicpc.net/problem/13414) 이 문제는 C++ STL라이브러리의 map을 이용하므로, map에 대해 잘 모르신다면, 아래글을 참고해주세요!C++ STL라이브러리의 map, set(http://sarah950716.tistory.com/6) 해당 수업의 수강 가능 정원과 수강신청 버튼을 누른 학생의 학번이 순서대로 주어질 때, 수강신청에 성공한 학생들의 학번을 출력하는 문제입니다. (단, 동일한 학생이 수강신청 버튼을 두 번 이상 누른 경우 마지막에 누른 것만 유효처리됨) 이 문제는 단순한 구현 문제입니다. 단, 동일한 학생이 수강신청을 두 번 누른 경우, 마지막에 누른 것만 유효처리해야 하기 때문에 중복을 제거할 수 있는 자료구조를 ..
BOJ 13413 오셀로 재배치 (https://www.acmicpc.net/problem/13413) 앞면은 검정, 뒷면은 흰색으로 된 오셀로 말을 ① 임의의 2개의 말을 위치를 바꾸거나(인접한 말일 필요없음)② 말 1개를 뒤집어 색깔 변경 하는 작업 중 하나를 골라 시행할 수 있을 때, 초기 상태에서 목표 상태까지 도달할 수 있는 최소 작업 횟수를 구하는 문제입니다. 특정한 알고리즘을 사용하는 문제는 아니지만, 예시들을 통해 어떻게 말을 바꿔나가는 것이 최소 작업 횟수가 되는지를 생각하다 보면 방법을 알 수 있습니다. 제가 사용한 방법은 B여야 하는데 W인 말과, W여야 하는데 B인 말을 서로 모두 바꾼 후에(①) 아직 목표 상태에 도달하지 못한 말들을 각각 뒤집는(②) 방법입니다. 검정색에서 흰색이..
5. map 1) 정의인덱스로 int가 아닌 다른 자료형을 사용할 수 있는 배열(후에 사용법을 이해하기 편하도록 '배열'이라고 했지만, map의 내부적인 구조는 각 노드가 key와 value의 쌍으로 이루어진 '트리'입니다. 특히 검색, 삽입, 삭제 등의 속도를 빠르게 하기 위해 균형 이진 트리 중의 하나인 '레드 블랙 트리'로 구현되어 있습니다. 검색 속도가 특히 빠른데 이는 key를 기준으로 정렬된 상태이기 때문입니다.) 2) 용도연관 있는 두 값을 함께 묶어서 관리하되, 검색을 빠르게 하고 싶은 경우 (Ex. 만약 SNS상 사람들의 친구 관계를 그래프를 이용해 나타내고, 이 그래프에 여러가지 알고리즘들을 적용해 멋진 일들을 하고 싶다고 합시다. 일반적인 경우라면, 사람을 정점으로, 사람들 간의 친구..
1. queue 1) 정의 FIFO(First In First Out, 선입선출) 자료구조 2) 용도 ① BFS(Breadth First Search, 너비우선탐색) ② 특별한 알고리즘을 사용하는 것이 아니라 직접 문제 상황을 구현하는 문제들 중 FIFO의 구조를 가지는 문제를 풀 때 (Ex. 다리에 올라갈 수 있는 최대 하중과 각 트럭의 무게가 주어질 때, 모든 트럭이 다리를 지나가는 데 걸리는 최소 시간을 구하는 문제. 다리에 먼저 올라간 트럭이 먼저 나오게 되기 때문에 queue를 이용해 구현하면 풀 수 있다.) 3) 사용법 queue를 사용하기 위해서는 를 include 해야 합니다. 편의상 멤버 함수의 적용 대상이 되는 queue를 q라고 부르도록 하겠습니다. 멤버 함수 기능 q.size() q..
가장 기본적인 STL 컨테이너라고 할 수 있는 pair와 vector에 대해서 먼저 알아보도록 하겠습니다. 이해하기 쉽도록 제 나름대로 정한 정의와 문제를 풀 때의 쓰임새를 알아보고 난 후, 멤버 함수들과 예제를 통해 사용법을 익혀보도록 하겠습니다. 1. pair 1) 정의 이름이 'first', 'second'인 두 개의 변수를 저장할 수 있는 struct 2) 용도 ① 이차원 배열의 인덱스 ② 이차원 좌표평면에서의 좌표 ③ 정점 번호와 해당 정점 번호까지의 최단거리를 묶어서 저장해야 되는 경우 3) 사용법 pair를 사용하기 위해서는 를 include 해야 합니다. pair는 다른 컨테이너들에 비해 간단한 구조이기 때문에 멤버 함수가 적습니다. 따라서, 바로 예제를 통해 pair의 기본적인 사용법을 ..
C++의 가장 자주 사용되는 라이브러리 중 하나인 STL(Standard Template Library)에 대해 한 번쯤은 들어보셨을 겁니다. 그런데 왜 PS를 공부하기 전에 STL의 사용법을 익혀야 할까요? 그 이유는 문제를 푸는 데 필요한 알고리즘들을 빠르게 구현할 수 있기 때문입니다. 공부를 하다 보면, 더 빠른 알고리즘을 위해 구현이 너무 오래 걸리는 알고리즘을 선택하는 오류를 범하는 경우가 있습니다. 하지만, 제한된 시간 내에 많은 문제를 풀어야 하는 대회 상황에서는 구현에 드는 시간도 고려해야 합니다. 문제를 푸는 시간의 대부분은 생각해낸 알고리즘을 '구현'하는 시간이기 때문입니다. 문제의 제한시간은 대체적으로 5초 이내이기 때문에 작성한 프로그램이 답을 출력해낼 때까지 걸리는 시간은 구현에 ..
PS를 배우기 전에 미리 알아두면 좋은 사항들이 있습니다.PS를 해본 사람들에겐 당연하지만, 처음 접하는 사람들에겐 전혀 당연하지 않은 사항들이라고 생각해 따로 글을 쓰게 되었습니다. 저 또한 처음엔 이런 점들을 잘 몰랐구요! PS를 처음 접하시는 분들에게 조금이라도 도움이 되길 바랍니다. 1. 전역변수 여태까지는 전역변수를 사용하면 코드 재사용시 프로그램의 안정성에 좋지 않다는 등의 이유로, 전역변수를 가급적이면 사용하지 않는 것이 좋다고 배워왔습니다. 하지만, PS를 할 때는 전역변수를 적극적으로 사용하는 것이 좋습니다. 예를 들어 보겠습니다. 어떤 배열(arr)이 있을 때, s번째 칸부터 e번째 칸까지의 합을 구하는 함수 sumOfArray가 있다고 해보겠습니다. 그러면, 함수 sumOfArray는..