PC/UVa ID : 110108/10142 사설 개인적으로 책에 적혀있는 문제가 이해가 되지 않았다, 도데체 무슨 말을 하는지 몰라, 친구(박형준)과 토론을 하며 문제를 생각했고, 형준이가 문제에 대해서 이해하여, 여기에 정리하게 된다. 답지를 보고, 형준이가 말한 문제가 올바른지 검증을 했으므로, 이 문제가 100% 정확하다. 책의 문제가 이해가 되지 않아, 검색하다 이 블로그를 찾게 된 사람들에게 도움이 되었으면 한다. 개요 호주식 투표 제도를 구현하는 문제입니다. 호주식 투표 제도는 다음과 같은 알고리즘에 따라 후보자가 당선됩니다. 투표권자는 모든 후보자에게 순위를 메겨 투표를 합니다. 이때 1순위 후보자만을 집계하여, 과반수 이상 표를 얻은 사람이 있다면, 당선을 시킵니다. 만약 당선자가 없다면..
분류 전체보기 검색 결과
1부에선 기본적인 개념을 정리했습니다. 2부에서는 BOOST_FOREACH를 보다 확장해서 사용하거나, 최적화 해서 사용 하는 방법에 대해서 알아 봅니다. BOOST_FOREACH 의 확장 BOOST_FOREACH 를 사용하다보면, 내가 정의한 새로운 타입의 집합체도 BOOST_FOREACH를 이용하여 훑고 싶을 때가 있습니다. 어떻게 하면 사용 할 수 있을까요? 여기서 말하는 확장은 바로 "새로운 타입을 BOOST_FOREACH"로 돌리기 위한 확장 입니다. 확장을 하는 방법으로 다음 코드를 보세요. 여기선 예로 std::string 이라고 정하는데, 원리는 똑같습니다. #include #include #include // for BOOST_FOREACH namespace my { // 시작과 끝을 나..
BOOST_FOREACH 의 경우 boost 1.34.0 부터 정식으로 들어간 라이브러리 입니다. 본 문서는 boost 1.40.0 기준으로 작성 되었습니다. BOOST_FOREACH 에 대한 메뉴얼은 다음의 링크에서 확인 할 수 있습니다. http://www.boost.org/doc/libs/1_40_0/doc/html/foreach.html BOOST_FOREACH 란? C++ 에서 반복자로 정해진 구역을 기존의 방식보다 편하게 훑기 위해서 만들어진 라이브러리 입니다. 기존의 방식으로는 for 문, std::for_each 가 대표적인데, 사용방법이 귀찮거나, 소스관리가 어려운 단점이 있었기에, 사용 할 때 많은 신경을 써야 했습니다. 기존의 방법들의 단점을 한번 봐 봅시다. #include // f..
PC/UVa ID : 110107/10196 개요 체스판에서 킹이 상대방의 수에 의해서 잡힐 수 있다면, 체크 상태를 알려 주는 일을 하는 것이다. 체스를 할 줄 모르면 뭐, 체스 룰부터 아는게 좋다. 나같은 경우 장기 룰을 알고 있기 때문에 장기와 빗대서 말하겠다. 폰(p) : 한번에 앞으로 한칸 씩 앞으로 갈 수 있으나, 상대 패를 먹을 때는 앞쪽 대각선 1칸 범위에서만 막을 수 있다. 마지막 폰은 뒤로 갈 수 없으며, 뒤로 가서 먹을 수도 없다. 나이트(n) : 장기의 馬 같은 움직임을 가진 녀석인데, 주변 장애물에 상관없이 공격 할 수 있다. 비숍(b) : 대각선 방향으로 거리 제약 없이 이동하면서 상대 패를 먹을 수 있다. 록(r) : 장기의 車 와 같은 움직임을 가진 녀석이다. 퀸(q) : 비..
이번 boost 포스팅은 boost의 1.38.0 버전 부터 추가가 된 scope exit 입니다. 라이브러리 이름에서 오는 포스에서 알 수 있듯이, "유효 범위"와 관련 있는 라이브러리 입니다. http://www.boost.org/doc/libs/1_40_0/libs/scope_exit/doc/html/index.html 에서 확인 가능합니다만, 시간이 지나서 링크가 깨질수 있으니. boost.org 에 직접 들어 가봐서 보는게 좋을듯 싶네요. scope exit 란 무엇인가? "{ }" 를 벗어 날 경우, { } 안에 있는 변수들의 경우, 스택 되감기에 의하여, 지워 집니다. 이때 C++에서의 객체라면, 소멸자를 호출해주는데, 문제는 동적메모리 할당된 개체의 경우라든지, 뮤텍스라든지, 파일 핸들, ..
PC/UVa ID : 110106/10033 개요 어떤 컴퓨터에 열 개의 레지스터와 1,000워드 분량의 램이 있다. 각 레지스터 또는 램 위치에는 0 이상 999이하의 세 자리 정수가 저장된다. 명령어는 세자리 정수로 인코딩되며 램에 저장된다. 인코딩은 다음과 같다. 100 : 종료 2dn : d 레지스터를 n으로 설정(0 이상 9 이하) 3dn : d 레지스터를 n 더함 4dn : d 레지스터를 n 곱함 5ds : d 레지스터를 s 레지스터의 값으로 설정 6ds : s 레지스터의 값을 d 레지스터에 더함 7ds : d 레지스터에 s 레지스터의 값을 곱함 8da : d 레지스터를 a 레지스터에 저장된 주소의 램에 들어 있는 값으로 설정 9sa : a 레지스터에 저장된 주소의 램에 s 레지스터의 값을 대..
최근댓글