목록2020/03 (5)
Joonas' Note
게임하러 가기: https://joonas-yoon.github.io/rubik-s-race/ Rubik's Race Move the tiles, Solve the puzzle! joonas-yoon.github.io 개발기: https://joonas.tistory.com/120 게임을 계속 해보면, 사람의 직관으로 풀리기는 한다. 이러한 직관을 나름 생각해본 알고리즘(풀이) 글로 옮길까한다. 풀이 먼저, 게임의 목표는 주어진 3x3 패턴에 맞게 5x5의 중앙에 위치한 3x3 자리를 똑같게 만드는 것이다. 1번부터 9번까지의 칸에 맞는 색깔을 하나씩 채우면 된다. 순서대로 색깔을 맞추면서, 맞춰진 색깔의 칸은 움직이지 않도록 고정한다. 빈칸으로 원하는 색깔을 옮기는 것이 또 다른 문제인데, 위 그림과 ..
종종 사용하는 std::binary_search와 그 친구들(lower_bound, upper_bound)의 구현입니다.이 친구들은 헤더에 있습니다. 평소 쓰던 스타일을 그대로 작성하여 올립니다.binary_search가 왜 그 lower_bound와 key가 같은지만 비교하는 지는, 다른 글에서 설명하였다. [보기]코드
저는 quick sort를 기반으로 구현했고, 그 중에서도 중간값이 아닌 (위치가) 중앙에 있는 값을 사용했습니다.이 정도만 구현해도 많은 문제는 생기지 않았습니다. 다만 실제 std::sort 는 구조가 조금 다른 것으로 알고 있습니다. 크기가 100개 이하인 케이스는 insertion sort를 사용하는 등 최적화를 위해서 수정했다고 하네요. template 함수로 작성했기 때문에, 타입은 별도로 명시하지 않아도 됩니다.int형 배열 a[100]에 대해서도, std::sort 함수 쓰듯이 sort(a, a+100) 이라고 호출해도 동작합니다. 이전 게시글에서 구현한 vector를 파라미터로 넘겨도 동작합니다. 즉, sort(vec.begin(), vec.end()) 가능합니다.코드
STL 라이브러리를 사용할 수 없는 환경(시험장 등)에서 vector를 간단하게 구현하는 코드입니다.크기가 동적으로 관리되는, STL 중 정말 많이 사용되는 편리한 sequence container이죠. 큰 기능은 최대한 넣지 않았고, 기존의 vector의 사용 인터페이스와 최소한으로 비슷하게 작성한 것입니다.기본 생성자 몇개와, push_back(), pop_back(), clear() 등의 기본적인 함수가 있고, begin(), end()와 같은 반복자(iterator)들은 실제 반복자는 아니고 비스무리하게만 만들었습니다. 그래도 구조가 같아서, sort(arr.begin(), arr.end()) 를 그대로 사용해도 돌아갑니다.코드
※ 정답과 풀이가 포함된 스포일러가 있습니다. [ 문제적 남자 : 브레인 유랑단 13회, 역대급 신비로운 문제]문제와, 이번 문제는 정말 신기하고 신비로웠다.서로 전혀 다른 두 풀이가 같은 답을 만들어냈다.우선 두 정사각형 모두, 가로줄과 세로줄, 대각선줄의 합이 같도록 수를 채워야했는데 그 답으로 위와 같이 채워진 것이다. 규칙 (문제의 정답)왼쪽 사각형에 있는 한 칸의 수를 영어로 적었을 때, 그 단어의 길이가 오른쪽 사각형의 같은 칸에 적혀 있는 것이다.그러면서 모든 줄의 합이 같게 유지된 것이다.오현민은 등차수열로 접근해서 왼쪽 사각형을 풀고, 오른쪽에서 가능한 모든 경우의 수를 추린 후 정답을 찾았다.여기서 나는 의문이 생겼다.그럼, 이런 (두) 사각형은 얼마나 더 있을까? 탐색1부터 99까지의..