알고리즘

포스트: 67
Tags

Posts

67 posts
알고리즘 응용문제 챕터 진입, 실패, 그리고 반성

알고리즘 응용문제 챕터 진입, 실패, 그리고 반성

어느새 탑코더 알고리즘 트레이닝 책의 마지막 단원인 응용문제 파트까지 도달했다. 블로그에 올린게 8문제, 그리고 따로 푼게 그 정도이니 한 달 치고는 꽤 많은 문제를 다뤄본 셈이다. 그런데 이 응용문제 파트, 정말 그동안 내가 뭘 했나 싶을 정도로 절망감을 안겨준다. 시도한 문제는 '바이너리 플립' 으로 디비전1의 레벨 2에 위치한 문제. 처음으로 마주치게 된 디비전 1 문제이다. 0이 쓰여진 카드가 A장, 1이 쓰여진 카드가 B장 존재한다. 각 턴에 K개를 뒤집을 때 모두 1로 만드는 것은 가능한가? 가능하다면 그 최소 턴은? 그리고 저자는 '이 문제를 제한 시간 내에 풀 수 있으면 레드 코더에 가까울 것' 이라는 말로 호승심을 불태웠다. 생각한 방법은 당연

[TopCoder] 해밀턴 패스(Hamilton Path) 분석 및 풀이

[TopCoder] 해밀턴 패스(Hamilton Path) 분석 및 풀이

* 문제 번호 * SRM452 Div2 Lv3 * 문제 유형 * 수학 * 사용 언어 * C++ * 풀이 상태 * FAIL * 소요 시간 * 6시간 * 나의 전략 * 먼저 불가능한 경우는 총 두 가지가 존재한다. 1. Y가 3개 이상 붙은 도시. 2. 1 - 2 - 3 - 1 같이 순환하는 연결. 테스트 케이스에서 제공하기에 쉽게 판별할 수 있었다. 그리고 필수적으로 가야하는 경로로 묶인 그룹을 C, 모두 NNN...으로 고립된 도시를 I라고 할 때, 찾아야하는 경로의 수가 (C + I) * 2 * I 임은 쉽게 알 수 있었다. (뒤의 2 * I 는 각 그룹이 서로 끝점으로 연결될 수 있는 가지 수) 이 떄, Y가 하나

[TopCoder] 둥근 모양의 국가들(CirclesCountry) 분석 및 풀이

[TopCoder] 둥근 모양의 국가들(CirclesCountry) 분석 및 풀이

* 문제 번호 * SRM443 Div2 Lv2 * 문제 유형 * 수학 * 사용 언어 * C++ * 풀이 상태 * SUCCESS * 소요 시간 * 10분 * 나의 전략 * 레벨 2의 문제 치고 너무 쉽게 풀려서 당황했던 문제. 그 흔한 함정조차 없었다. 요점은 시작점과 도착점이 '반드시' 하나의 원형 경계를 넘는 경우를 캐치할 수 있냐는 것. 아주 당연하게도, 두 점 중 하나가 원 하나의 radius 내부에 존재하고, 하나가 바깥에 존재하는 경우만 해당된다. 즉, (x-x1)^2 + (y-y1)^2