본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

Algorithm/기타 알고리즘21

[시뮬레이션] 행렬 테두리 회전하기 - 2021 Dev-Matching 해결 방법 단순한 시뮬레이션 문제지만 한 가지 주의할 점이 있다. 그것은 칸에 있는 숫자를 저장하는 변수가 하나 필요하다는 것인데, 칸에 있는 숫자를 기억하지 않고 이동해버리면 값이 덮어 씌워져서 데이터가 날아가버릴 수 있기 때문이다. 그래서 현재의 좌표에 있는 숫자를 저장해뒀다가 다음 칸에 넣을 수 있는 save라는 변수를 하나 추가했다. 그리고 회전의 경우에는 상하좌우 4개의 테두리를 지나는 상황으로 나눠서 반복문을 수행했다. 각 반복문은 각 꼭짓점 사이에서 수행되는 것이다. 소스 코드 #include using namespace std; vector v; int rotate(vector query) { int mini=10001; int x, y; // 현재 좌표 저장 int save; // 현재 .. 2022. 3. 27.
[투 포인터] 보석 쇼핑 - 2020 카카오 인턴십 gems 배열의 크기는 최대 100000이기 때문에 O(n^2) 이상의 알고리즘으로는 효율성에서 통과하지 못할 것이다. 즉, 구간의 왼쪽과 오른쪽 끝점을 조절해가며 해답을 찾는 투 포인터 알고리즘이 필요하다. 해결 방식을 그림으로 표현하면 이렇다. 모든 보석의 종류를 포함하는 첫 구간(0부터 시작)을 기준으로 투 포인트 알고리즘을 수행하면 되는 방식이다. 왼쪽 끝점은 이동할 수 있는 만큼 이동하고 오른쪽 끝점은 1만큼 이동하는 과정을 반복했고, 각 과정이 끝날 때마다 구간의 길이가 최솟값이면 벡터에 저장했다. 왼쪽 끝점에 있는 보석이 구간에 단 1개만 있는 상태에서 왼쪽 끝점을 이동해버리면 그 구간은 모든 보석의 종류를 포함할 수 없게 된다. 반대로, 왼쪽 끝점에 있는 보석이 구간에 여러개가 있다면 왼쪽.. 2022. 3. 20.
[시뮬레이션] 오픈채팅장 - 2019 카카오 블라인드 채용 해결 방법 문제를 보면, 유저가 중간에 닉네임을 변경했을 경우에도 이전에 기록했던 닉네임들까지 변경된 닉네임으로 바뀐다고 한다. 즉, 유저별 마지막 닉네임이 가장 중요하다. 유저의 닉네임이 바뀌는 경우는 Enter과 Change이므로, 이 경우에만 유저의 닉네임을 업데이트 해주면 된다. 유저별 마지막 닉네임을 확정지었다면, 유저의 마지막 닉네임이 반영된 로그를 출력해주기만 하면 된다. 소스 코드 #include #include #include #include using namespace std; map m; vector log[100001]; vector space; string str, action, uid; vector solution(vector record) { vector answer; for .. 2022. 3. 5.