Security ★ Development(154)
-
옥상 3
문제는 더블릿 옥상에 있는 koi_Ebishop입니다.문제 사이트 주소입니다.http://183.106.113.109/pool/koi_Ebishop/koi_Ebishop.php?pname=koi_Ebishop 판 위에 비숍을 놓을 수 있는 최대 자리수를 구하는 문제입니다. 비숍은 대각선에 같은 비숍을 놓을 수 없으며 대각선의 비숍 유무와 관계없이 비숍을 놓을 수 없는 자리가 있습니다.우선 이 문제는 백트래킹으로 풀었습니다. 일단 알아두면 좋은 것들은 한쪽 대각선방향(오른쪽 위에서 왼쪽 아래)으로 겹치지 않고 놓을 수 있는 수는 2*한쪽칸의 개수-1로 4*4 칸의 경우 7칸이 됩니다. 재귀함수 탈출조건으로 쓰일겁니다. 예의 5*5인 경우 0, 0부터 4, 4까지 대각선으로 검사를 할 때 9번의 검사면 끝납..
2014.12.08 -
문자와 문자열 1
문제는 더블릿 12 문자와 문자열에 있는 isbn입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/isbn/isbn.php?pname=isbn 문제 자체는 문제에서 설명해주는대로 구현하면 간단합니다.입력을 받아 ?를 제외한 합을 구하고 그 값을 11로 나눈 후 (?의 위치 가중치) * (0~10) + (11로 나눈 값)이 0이 될 때의 0~10의 값을 출력하면 됩니다.여기서 얻어갈 건 15688?111X를 입력 받은 후 이 문자열을 숫자로 처리할 때인데 저는 char 배열을 선언후 cin을 이용해 한번에 입력받은 후 각 인덱스에 대하여 처리하였습니다.각 인덱스의 문자 값을 정수로 바꿔 계산할 때에는 -'0'을 해주면 됩니다.예)int i=ar[1]-'0'; //ar[1..
2014.12.03 -
divide and conquer 3
문제는 더블릿 10 divide and conquer에 있는 mod_fibo입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/mod_fibo/mod_fibo.php?pname=mod_fibo 엄청 큰 피보나치 수를 구하는게 문제입니다.피보나치 수열의 단순한 방법(전전값과 전값의 합)으로는 시간초과가 뜹니다. 나눗셈을 미리 해주는 방법도 마찬가지로 시간초과가 납니다.풀기 위해서는 행렬을 이용해주는 방법이 있습니다.1 11 0을 피보나치 수열의 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55...에서 첫번째 1에 해당하는 행렬로보고 값은 0행 0열의 값을 봅니다.이 행렬을 제곱하면 2 11 1이 나오고 이 값은 2에 대항하는 행렬입니다.이 행렬을 제곱하면5..
2014.11.25 -
backtracking 2
문제는 더블릿 25 backtracking에 있는 door입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/door/door.php?pname=door 열린 문 2곳이 있고 앞으로 열어야 하는 문을 열린 문으로 이동하면서 이동한 거리를 카운트합니다. 이 때 이동한 거리가 가장 적은 회수를 구하는 문제입니다.다음에 열어야 할 문은 열린 문 2군데중 한 군데와 바꿀 수 있습니다.무조건 가까운 거리와 바꿨다가는 다음 경우의 수에서 더 많은 거리를 이동해야 할 수 있습니다.이번에 열어야 할 문을 열린 문 2곳 중에 왼쪽문과 바꾼 경우, 오른쪽문과 바꾼 경우를 모두 트리를 타듯이 타고 내려갑니다.열린 문이 2와 5이고열어야 할 문이 3 4 6 5 인 경우첫 번째 문 교체 (2-..
2014.11.20 -
backtracking 1
문제는 더블릿 25 backtracking에 있는 scales입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/scales/scales.php?pname=scales 입력받은 무게들의 합이 반이 되는 부분집합의 수를 구하는 문제입니다.이를 구하기 위해선 예제인 1 9 5 3 8로 볼 경우11 91 9 51 9 5 3 81 51 5 3등 모든 경우의 수를 봐야합니다.이럴 때 백트래킹을 쓰는데 재귀를 사용합니다.우선 1 9 5 3 8을 배열에 입력 받고 재귀를 호출하는 방식은 다음과 같습니다.현재 값으로 그냥 호출, 현재값에 다음값을 더해 호출두 경우 모두 각각 카운터값을 1씩 증가시킵니다.그럼 첫 번째 값 1에 대해 다음 호출은 1과 1+9가 됩니다.그 다음 호출은 1에..
2014.11.17 -
queue 1
문제는 더블릿 14 queue에 있는 catch_cow입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/catch_cow/catch_cow.php?pname=catch_cow 수 N과 K가 주어지고 N을 *2, +1, -1을 한번 할 때마다 카운터가 증가합니다. 이 때 N이 K가 될 수 있는 가장 적은 경로(카운터 크기)를 구하면 됩니다.친절하게 queue로 풀으라고 알려주고 있으니 그렇게 만듭니다. 기본적으로 리스트에 어떤 경우의 값을 다 넣어주고 반복이 진행되면서 그 값들을 전부 빼서 검사를 진행합니다. 그리고 그 결과 답이 나오지 않으면 다음 경우의 수들을 다시 리스트에 전부 넣어주고 검사하는 것을 반복합니다.먼저 첫 N값을 리스트에 넣습니다.그리고 bfs를 실행..
2014.11.15