목록전체 글 (290)
거의 알고리즘 일기장
string의 사용방법들 #include #include #include #include using namespace std; //osstream을 이용해서 문자열로 변환하기? template string Tostring(T x) { ostringstream osstream; osstream > x) ? true : false; } int main() { string my_string(Tostring("hello")); double d; if (FromString(my_string, d)) cout
https://www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀있고, i번째 원판에 적힌 j번째 수의 위치는 (i, j)로 표현한다. 수의 위치는 다음을 만족한다. (i, 1)은 (i, 2), (i, M)과 인접하다. (i, M)은 (i, M-1), (i, 1)과 인접하다. (i, j)는 (i, j-1), (i, j www.acmicpc.net 풀이방법 1. 원판을 회전시킨다. 2. 인접한수가 있는지 확인하고 있다면 -1로 바꿔준다 3. 인접한수가 없다면 평균을 구해 평균..
https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하나의 말 위에 다른 말을 올릴 수 있다. 체스판의 각 칸은 흰색, 빨간색, 파란색 중 하나로 색칠되어있다. 게임은 체스판 위에 말 K개를 놓고 시작한다. 말은 1번부터 K번까지 번호가 매겨져 있고, 이동 방향도 미리 정해져 있다. 이동 방향은 위, 아래, 왼쪽, 오른쪽 www.acmicpc.net 풀이방법 시뮬레이션 문제다보니 생각할거리가 정말 많다. 1. 내 위에 쌓여있는 말은 무엇이고, 내 밑에 쌓여있는 말은 무엇인가?..
https://www.acmicpc.net/problem/5622 5622번: 다이얼 문제 상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다. www.acmicpc.net 공식으로 깔끔하게 나오지 않는 문제들을 풀때 이런 문제를 풀때 string number = "22233344455566677778889999..
https://www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 재현시로 변경했다. 이번 선거에서는 최대한 공평하게 선거구를 획정하려고 한다. 재현시는 크기가 N×N인 격자로 나타낼 수 있다. 격자의 각 칸은 구역을 의미하고, r행 c열에 있는 구역은 (r, c)로 나타낼 수 있다. 구역을 다섯 개의 선거구로 나눠야 하고, 각 구역은 다 www.acmicpc.net 풀이방법 이 문제는 주어진 범위 그대로 5 선거구의 경계선을 그어주고 풀면 풀이가 쉽다. 그러므로 내 코드를 참조하여 풀이시 주..
https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고, 활성 상태인 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시에 복제되며, 1초가 걸린다. 승원이는 연구소의 바이러스 M개를 활성 상태로 변경하려고 한다. 연구소는 크기가 N×N인 정사각형으로 나타낼 수 있으며, 정사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 www.acmicpc.net 자료형 선언 vectorvirusPoint; int map[52][52]; bool visit[52][52]; int targetP..
1. iterator란? map, set, vector 등등 여러 컨테이너를 조회하는데 공통적으로 쓰이는 개념이다. 2. 사용법 #include #include #include #include using namespace std; int main() { set s; vector vec = {1, 2, 3, 5}; s.insert(2); s.insert(4); //방법 1 for (auto it = s.begin(); it != s.end(); it++) cout
1. weak_ptr의 필요성 shared_ptr은 같은 곳을 몇 개의 객체에서 가리키는지를 추적하고, 그 수가 0 이 되야만 비로소 해제를 시켜주는 방식의 포인터이다. 주제를 조금 넘어서지만 shared_ptr가 왜 필요한지 정말 간단히 예를 들어보자면 #include using namespace std; int main() { int c = 5; int* a = &c; int* b = a; delete a; //오류!! cout
https://www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net 1. 풀이방법 이 문제는 주요함수하나만 제대로 짠다면 그리 문제가 될일은 없기 때문에 Rcalculate라는 함수에서 문제가 될 부분만 설명하겠다. bool compare(const pair& a, const pair& b) { if (a.second == b.second) return a.first < b.first; return a.second < b.second; } vector..
https://www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. 칸에는 상어가 최대 한 마리 들어있을 수 있다. 상어는 크기와 속도를 가지고 있다. 낚시왕은 처음에 1번 열의 한 칸 왼쪽에 있다. 다음은 1초 동안 일어나는 일이며, 아래 적힌 순서대로 일어난다. 낚시왕은 가장 오른쪽 열의 오른쪽 칸에 이동하 www.acmicpc.net 자료선언 class Shark { public: int speed; int dir; int size; Shark(int speed_in..