#문제 https://www.acmicpc.net/problem/1107 #풀이문제 해결 방법에 대해 감이 잘 오지 않았던 문제였습니다.별에 별 생각을 다했으나.. 쉽게 풀 수 있는 방법이 있어서 충격을...받았습니다.. 가장 쉽게 접근 할 수 있는 방법은 모든 경우의 수를 해보는 경우입니다.즉, 0부터 할 수 있는 모든 채널을 확인하면서 원하는 채널에 가장 적은 버튼 누름으로 가는 방법을 찾아가면 됩니다.말로만 보면 굉장히 어려울 수 있으나 직접 코드를 보면 이해가기 편하실 겁니다. 채널을 이동할 때 매우 여러가지 경우의 수가 있겠지만, 문제에서 원하는 것은 최소의 버튼 누름이란것을 캐치하셔야합니다!즉, + - + - + + + + 처럼 중간에 다른 버튼이 끼여있다면 의미가 없어지며, + - + 350..
#문제 https://www.acmicpc.net/problem/3568 #풀이해당 문제는 단순히 나와있는대로 그대로~ 하는것이 중요합니다.저는 너무 생각을 많이해서 저어어 멀리까지 갔다 다시 돌아왔습니다. 변수형에서 나오는 배열,참조,포인터 순서대로 알고 있어야되며, 변수명 뒤에 나오는 추가 변수형또한 앞에 변수형의 순서에 맞게 차곡차곡 알아서 쌓이게 만드는줄 알았습니다.예를 들면 int&[]*[]& aADD*[]&; 식의 문장이 있을때는int&&&[][][]** aADD; 로 바뀌는 줄 알았던 것이죠....:(정말로 이해력에 감탄했습니다..ㅎㅎ.. 다시 문제에대해 말하자면, 먼저 빈칸을 기준으로 나누어야 합니다. 제가 주로 쓰는 방식은 sstream을 이용하여 문자들을 나눕니다. 또한 한 줄에 대하여..
#문제 https://www.acmicpc.net/problem/15662 #풀이이 문제는 시뮬레이션으로 하여 풀었습니다. 기존 톱니바퀴 문제에서 조금 더 진화된 문제로 4개가 아닌 T개의 톱니를 다 보아야 합니다.해당 조건으로 인해 기준이 되는 톱니바퀴를 돌릴 경우 양쪽으로 전부 혹은 몇개만 돌아갈 수 있습니다. 돌아갈 수 있는 톱니바퀴를 찾을때 BFS 혹은 DFS로 확인하면서 찾을 수 있다고 생각했지만...기준 톱니의 왼쪽 오른쪽을 나누어 따로 확인하는 방식으로 하였습니다. BFS나 DFS로도 풀어 봐야겠습니다 :) 혹시 BFS 혹은 DFS로 푸신 분들은 코드 공유좀 부탁드리겠습니다! 돌아간 톱니를 찾은 뒤에는 톱니 바퀴를 방향에 맞게 돌려주는 것을 총 K번 반복 하면 끝입니다.톱니바퀴 문제에 비해 ..
# 문제https://www.acmicpc.net/problem/14499 # 풀이 이 문제는 시뮬레이션(문제에서 지시하는대로 코딩) 문제입니다. 위 문제의 핵심은 주사위 굴리기 와 굴릴때의 조건 맞추기 입니다. - 주사위 굴리기 - 주사위는 배열을 만들어 주사위 칸을 만들었고, 문제에서 처음 주어진 주사위의 모양을 이용하였습니다. 2 4 1 3 5 6위와 같이 배열의 1 번째가 무조건 위, 아래는 6 번째로 잡고 시작합니다.동으로 갈때는, [1 -> 3] [3 -> 6] [6 -> 4] [4 -> 1] 로 바뀌게 되어 네개의 칸(1,3,4,6)만 한칸씩 밀리게 됩니다.서는 그 반대며, 남과 북도 비슷하게 4칸(1,2,5,6)만 바꾸면 됩니다. - 굴릴때의 조건 맞추기 - 해당 조건은 굉장히 맞추기 쉽습..
# 문제 https://www.acmicpc.net/problem/16234 # 풀이 dfs를 사용하여 문제를 풀었습니다.(bfs로 하셔도 괜찮습니다.) 총 3개의 2차원 배열을 사용했습니다. 일단, 첫 번째는 초기 국가들의 인구수를 2차원 배열입니다.이 배열을 기반으로 국가간 연합이 가능한지 여부를 매번 따질 수 있게끔 하는 배열입니다. 두 번째는 dfs를 통하여 연합된 국가들을 표시하는 역할을 하는 배열입니다.나중에 인구수를 재배치 할때, 해당 배열을 보며 인구 수를 분배합니다. 세 번째는 dfs를 할때 가장 중요한 visit 배열입니다. 탐색을 배우신 분들이라면 이것이 얼마나 중요한지 아실겁니다. :) 이 문제는 단지번호붙이기 라는 문제에서 약간 심화된 문제라고 생각되어 링크를 걸어 놓았습니다.혹시..
# 문제 https://www.acmicpc.net/problem/16235 # 풀이 일단, 굉장히 구현스러운 문제... 그냥 문제 따라서 가면서 코드를 짜면 된다. 여기서 조심할점은..... 나무의 위치를 주어질때! x,y 가아닌 y,x 순으로 주어진다는 것이다.....이점을 명시하자.... 1년차에는 기본적으로 양분이 모두 5로 되어있기 때문에 1년차와 아닐때를 나누어 알고리즘을 짯다.1년차에는 기본적으로 주어진 양분을 사용, 2~K년차까지는 여태 남아있는 양분을 사용!이런식으로 기본적 양분을 넣어줄 2차원 배열, 매년마다 추가로 들어가는 양분을 저장해줄 2차원 배열, 최종으로 남게 되는 양분 2차원 배열 3개를 만들어 사용하였다. 우선 순위 큐를 사용해도 되지만, 벡터를 사용하였다.큐 사용할때 넣고..
# 문제 https://www.acmicpc.net/problem/16236 # 풀이 문제에 조건들이 은근히 많습니다. 현재 자신의 크기도 판단해야되고, 자기보다 크기가 작은 친구들의 위치를 구할때, 자신과 크기가 같은 친구들은 통과 되지만, 자신 보다 큰 친구들을 못지나가고....또, 자신보다 작은 친구들을 탐색할때, 같은 거리에 있는 친구들이 있다면 맨 위, 왼쪽이 우선순위여야하고....이렇게나 지켜야할 조건들이 은근 있어 까다로운 문제입니다. 저는 아기 상어의 위치와 정보를 구조체로 만들어 전역변수로 선언하여 계속해서 사용했습니다.또, 물고기들의 위치와 사이즈도 구조체로 만들어 위부터 그것도 왼쪽에서 맵 입력을 받을 때마다 넣어 주었습니다.(위로 인하여 위에 조건중 거리가 같은 물고기가 있을때 맨 ..
# 문제https://www.acmicpc.net/problem/15683 # 풀이완전탐색을 통해 풀었습니다. 일단, CCTV의 종류와 위치를 따로하여서 vector에 저장했습니다.그 후에 모든 CCTV를 돌면서 CCTV가 감시할 수 있는 모든방향을 검사하여 사각지대를 찾습니다. CCTV의 종류마다 감시하는 구역이 중복되는 것을 눈치 채셨나요?저는 1번, 3번,4번 카메라는 4방향 모두 돌려서 확인을 해주어야 되지만, 2번은 두번만 5번은 회전을 하지 않게끔 처리하였습니다. dfs() 에서는 인자로 cnt를 가지고 있습니다. 이 인자는 현재 몇번째 CCTV까지 검사하였는지 나타냅니다. 그렇다면 재귀 함수의 종료 조건은 쉽게 찾아 낼 수 있겠죠? 저는 cnt > (int)cctv.size()-1 일때! 종..
문제 https://www.acmicpc.net/problem/15686 풀이해당 문제는 완전 탐색을 통해 풀었습니다. 문제 해결 방법은 우선 집과 치킨집의 좌표를 vector를 사용하여 받았습니다. 그 뒤에 재귀를 통해 전체 치킨집 중에서 M개를 고르고, 고른 좌표들은 따로 저장을 하였습니다.(거리를 잴때 골라진 치킨집만 계산을 하기 위해!) M개가 다 선택되면 한번에 거리를 계산하고 최소 거리를 구합니다. 핵심적인 부분은 47~51 라인입니다. # select 함수에서 인자로 k를 넘긴 이유는 중복 선택을 없애고, 순서가 상관 없기 때문입니다. 예를 들어 치킨집이 5개가 있다고 하고 이중 3개를 골라야된다고 해봅시다.1,1,1 치킨집은 치킨집이 3개가 아니라 1개이므로 중복을 없애 주었습니다.따라서 ..
문제 문제 링크: https://www.acmicpc.net/problem/14503 처음에는 재귀를 이용해서 풀려고 했었지만, 실력부족으로 인하여 while문을 사용해서 움직였습니다.처음에 주어진 입력으로 로봇 움직임을 보려고 개 뻘짓도 해보고... 엑셀에 그려가면서 하나하나 체크 했던것 같습니다.DFS문제들만 풀면 무한 루프에 빠지는게 대다수였던것 같고 이 문제 또한 그랬습니다... ㅠㅠ 엑셀에 그려가면서 했던것입니다.. 다 못할꺼 같아서 무한 루프가 생겼던 점까지 해보았습니다. 문제가 2-3 조건에서 뒤로 갔을때, 이미 체크 되어있는 것을 생각을 못하는 정말 바보같은 실수를 했습니다.가로 안은 로봇이 움직이는 순서입니다. 방향은 해당 위치에서 턴 할때마다 적어 놓았습니다. 움직일 방향 배열의 순서도..