Security ★ Development/알고리즘(45)
-
dynamic programming 5
문제는 더블릿 21 dynamic programming에 있는 gc입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/gc/gc.php?pname=gc 입력으로 주어진 수 n을 1부터 n*2까지 차례대로 원 위에 쓰고 서로 엇갈리지 않게 선을 그을 수 있는 전체 경우의 수를 구하는 문제입니다. 이 문제에는 규칙이 있습니다. n=3일 때를 보면 1-2를 그었을 때 남은 숫자는 4개로 이를 서로 엇갈리지 않게 그을 수 있는 방법은 n이 2일 때와 같습니다. n=4일 때는 1-2를 그었을 때 남은 숫자가 6개로 이는 n=3일 때의 모든 경우의 수와 같습니다.즉 다음 경우의 수를 구하는데 이전 n값의 답을 구할 필요가 있습니다. 이 규칙을 보면 1->? 로 가는 선을 구하는데 ..
2015.01.06 -
배열 1
문제는 더블릿 5 배열에 있는 coci_modulo입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/coci_modulo/coci_modulo.php?pname=coci_modulo 배열에 속해있는 만큼 간단한 문제입니다.우선 받은 모든 수를 42로 나눠 나머지를 저장합니다.그리고 새로운 배열을 생성하여 첫 번째 나머지를 넣고 모든 수를 돌면서 해당 나머지가 새로운 배열에 있으면 넣지 않고 카운터를 하지 않으며 새로운 배열에 없는 나머지인 경우 그 나머지를 넣고 카운터를 합니다. 나머지는 0이 나올 수도 있으므로 새로운 배열은 0으로 초기화하면 안됩니다.
2015.01.04 -
graph, dfs 2
문제는 더블릿 16 graph, dfs에 있는 snail_trails입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/snail_trails/snail_trails.php?pname=snail_trails 맵에서 갈 수 없는 곳이 있을 때 상하좌우로 중복되지 않고 끊기지 않기 최대한 많이 움직일 수 있는 거리를 찾는 것이 목적입니다. 문제 그대로 한번 방향을 잡고 막힐 때까지 가면서 카운터를 세고 가장 높은 카운터를 출력해주면 됩니다.일단 문제의 맵을 입력받습니다. 그리고 시작점부터 우측 혹은 아래로 이동을 시작하는데 막다른 곳이 나오면 방향을 바꾸고 지나갔던 곳이 나오면 종료하는 재귀를 사용합니다.종료 조건이 지나간 곳을 만났을 때 입니다.다음 위치는 현재 방향의 한..
2015.01.04 -
graph, dfs 1
문제는 더블릿 16 graph, dfs에 있는 dfs입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/dfs/dfs.php?pname=dfs 그래프가 주어졌을 때 시작 정점부터 시작해서 dfs 방식으로 모든 정점을 돌며 각 정점을 출력하는 문제입니다. 문제를 풀기위해 가장 먼저 생각나는건 입력 예처럼 입력이 주어졌을 때 앞 -> 뒤로 갈 수 있는 것 뿐만 아니라 뒤 -> 앞으로도 방향성을 알 수 있어야 하고 이전에 방문했던 정점의 위치를 표시해야한다는 것입니다. 그러기 위해 2차원 배열 하나와 1차원 배열 하나씩 선언해 줍니다.1차원 배열은 해당 정점을 인덱스로 보고 방문은 했는지 표시하며 2차원 배열은 앞 -> 뒤, 뒤 -> 앞의 방향성을 표시합니다. 입력이 끝이 아..
2014.12.30 -
옥상 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