https://www.acmicpc.net/problem/17822 난이도를 확 높인 골2 구현 문제다. 나름 유명한 문제고, 이전에도 문제 찾다가 종종 본 적이 있었는데 딱 봐도 귀찮아서 안했었다.근데 오랜만에 잡으니까 근자감으로 이 정도는 껌일 것 같아서 시도 했더니 껌이었다ㅋ 우선 원판 회전을 위해 배열 대신 벡터를 사용했다.방향을 주의하여 한쪽 끝의 값을 저장하고 삭제한 뒤 반대쪽 끝에 값을 삽입했다. 이후 이웃한 값이 같은 값인지를 판단해야 한다.간단하게 머리로 시뮬레이션을 돌려봤더니 밖에서부터 하든 안에서부터 하든 문제가 발생했다.예를 들면 원판의 값이 1 1 1인 경우 처음 두 개의 1 1 이 같아 0 0 1로 바꿔버리면 마지막 1은 같은데도 불구하고 무시된다. 그래서 찾은 방법은 원 배열은..
Algorithm
https://www.acmicpc.net/problem/1283 몸풀기로 실버 문제를 한 문제 더 풀었다. 문자열, 구현 문제다.분명 어려워 보이지는 않는데 C++ 문자열은 split도 안되고 문자열 전체의 대소 변경도 안되는 관계로 조금 까다로웠다. 우선 입력 받는 문자열에 공백이 포함되므로 getline을 이용해서 입력을 받는다.(getline은 쓸 때마다 헷갈려서 찾아봤는데 이번 학기에 타 과 C++ 수업 또 들으면서 확실히 익숙해졌다.)다른 언어들이면 split을 이용해서 공백으로 구분을 했을텐데 C++은 그런게 존재하지 않기에 반복문을 돌렸다.1. 첫 글자가 단축키로 지정되었는지 확인2. 이전 글자가 공백인 글자가 단축키로 지정되었는지 순차적으로 확인 3. 별다른 조건 없이 옵션에 포함된 글자..
https://www.acmicpc.net/problem/1138 사실 이렇게 빨리 다시 코테 블로그를 작성하게 될 줄은 몰랐다.오랜만에 하니 역시나 재밌고, 코드를 더더더더더 간결하게 작성하고 싶어진다. 구현 문제다.나를 기준으로 왼쪽에 자신보다 큰 사람이 몇 명인지 순차적으로 입력이 들어온다.이와 비슷한 고난도 문제들에서는 자신보다 큰 거나 작은 것이 아닌 그들끼리도 관계를 가진다.그러나 이 문제는 나와의 관계만 파악하므로 쉽게 해결할 수 있었다. 입력의 크기가 굉장히 작기 때문에 효율적인 방법을 생각하지 않아도 해결할 수 있다. 작은 사람부터 배치할 것이기에 이후에 위치하는 사람들은 나보다 큰 사람이다.따라서 1번부터 n-2번 까지는 왼쪽에서 부터 i+1번째 빈 칸에 위치하면 된다.n-2번 까지 위..
https://www.acmicpc.net/problem/11265 11265번: 끝나지 않는 파티 입력의 첫 번째 줄에는 파티장의 크기 N(5 ≤ N ≤ 500)과 서비스를 요청한 손님의 수 M(1 ≤ M ≤ 10,000) 이 주어진다. 각각의 파티장은 1번부터 N번까지 번호가 붙여져 있다. 다음에는 N개의 줄에 걸 www.acmicpc.net 최단 경로 문제다. 플로이드 워셜을 이용하여 풀었다. 이 문제의 입력은 (시작, 끝, 가중치)가 아닌 배열로 입력이 들어오기 때문에 편했다. 플로이드 워셜을 이용해 모든 지점에서 모든 지점까지의 최단 경로를 구한다. m개의 입력을 맏아 a에서 b까지 걸리는 시간이 c초과와 이하인 경우로 나눠 출력을 한다. #include using namespace std; i..
https://www.acmicpc.net/problem/11404 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 플로이드 워셜 문제다. 모든 지점에서부터 모든 지점까지의 최단 경로를 구하는 문제다. 문제 이름처럼 플로이드 워셜을 이용한다. 플로이드 워셜은 코테용이 아닌 이론부터 공부를 했다. 플로이드 워셜의 개념은 아래와 같다. dij(k)는 i에서 j까지 가는데 k이하의 수를 거쳐서 지나갔을 때의 최단 경로를 의미한다. 거쳐간다의 의미는 i 와 j를 제외한 노드의 번호다. k == 0 일 때는 아무것도 거..