https://www.acmicpc.net/problem/2818 수학, 도형 감각이 약간 필요한 구현 문제다.n X m 배열을 1, 1부터 n, m까지 주사위가 ㄹ자로 모든 면을 굴러간다.이 때 모든 칸에서의 윗 면의 합을 구하는 문제다.시작은 윗 면 1, 앞 면 2, 오른쪽 면 3이다. 일반 주사위와 마찬가지로 마주보는 면의 합은 7이다. 굴러가는 걸 하나하나 구현하는 방법이 가장 먼저 떠올랐으나입력 범위가 n ,m 노가다 구현 방법도 떠오르지 않았다... 경우의 수가 너무 많아보였다. 그래서 생각한 건 가로의 길이가 4n + 0, 4n + 1, 4n + 2, 4n + 3인 경우로 나누어 생각했다.사실 1, 2, 3, 4만 생각해보고 그 후로는 계속 반복될 것이라고 생각했다.몇 줄을 내려가야 처음 상..
Algorithm
https://www.acmicpc.net/problem/14940 오랜만에 코테를 풀어보러 왔다.어떤 문제를 풀까 하다가 solved.ac 클래스에 새롭게 선정된 문제를 선택했다.쉽게쉽게 실버1로 선택하였지만 Python으로 풀어보는 코테는 처음이었다. 문제는 전혀 어렵지 않고 모든 지점에서부터 목적지의 최단거리를 구하는 것이다.bfs를 수행하고 visit 배열을 출력하면 된다. 어려운 부분은 없었지만 출력 조건이 헷갈렸다.우선 입력은 아래와 같다.0: 갈 수 없는 땅1: 갈 수 있는 당2: 목적지 출력은0: 원래 갈 수 없는 땅-1: 도달할 수 없는 땅나머지는 최단 거리이다. 각 경우만 잘 따지면 어렵진 않다. 오히려 국어가 어려웠던 문제. import sysimport queuedef bfs(): ..
https://www.acmicpc.net/problem/17822 난이도를 확 높인 골2 구현 문제다. 나름 유명한 문제고, 이전에도 문제 찾다가 종종 본 적이 있었는데 딱 봐도 귀찮아서 안했었다.근데 오랜만에 잡으니까 근자감으로 이 정도는 껌일 것 같아서 시도 했더니 껌이었다ㅋ 우선 원판 회전을 위해 배열 대신 벡터를 사용했다.방향을 주의하여 한쪽 끝의 값을 저장하고 삭제한 뒤 반대쪽 끝에 값을 삽입했다. 이후 이웃한 값이 같은 값인지를 판단해야 한다.간단하게 머리로 시뮬레이션을 돌려봤더니 밖에서부터 하든 안에서부터 하든 문제가 발생했다.예를 들면 원판의 값이 1 1 1인 경우 처음 두 개의 1 1 이 같아 0 0 1로 바꿔버리면 마지막 1은 같은데도 불구하고 무시된다. 그래서 찾은 방법은 원 배열은..
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번 까지 위..