본문 바로가기

분류 전체보기

(256)
[ 백준 9207 ] 페그 솔리테어 (C++) # 문제링크 www.acmicpc.net/problem/9207 9207번: 페그 솔리테어 각 테스트 케이스에 대해서, 핀을 움직여서 남길 수 있는 핀의 최소 개수와 그 개수를 만들기 위해 필요한 최소 이동 횟수를 출력한다. www.acmicpc.net 이 문제를 처음 봤을 때는 왜이렇게 어렵게 생각했는지 모르겠다. ㅎㅎㅎ 처음 봤을 때는 저 말들을 어떻게 움직여줘야하지? 그냥 무작위로 다 움직이면 되나? 저 말들의 위치값을 받아두어야 하나? 한 번 움직이면 그 다음은 어떡하지? ... 뭔가 정리가 안되었다. 그냥 for 문 돌면서 말의 위치를 찾아서, 말이 이동 가능한 모든 경우의 수로 돌려보면 되는 문제였다. 근데 맵이 또 계속 달라지는데 어떻게 하지? 원본을 복사해뒀다가 한번 시뮬레이션을 하고 다시..
[ 백준 11562 ] 백양로 브레이크 # 문제링크 www.acmicpc.net/problem/11562 11562번: 백양로 브레이크 서울 소재 Y모 대학교에서 대규모 공사를 진행하면서, 학교가 마치 미로처럼 변해버리고 말았다. 공사 이전까지는 어떤 건물에서 출발하더라도 다른 모든 건물로 갈 수 있는 길이 있었으나, 공 www.acmicpc.net 처음에는 하나하나 BFS로 구했다. start 에서 end 까지 queue로 돌려가면서 최적의 거리를 찾았는데, 그렇게 하면 런타임에러가 난다. 그래서 검색해보니 다들 플로이드 와샬 방법으로 풀고있었다. 플로이드 와샬 방법은 모든 노드에서 모든 노드로 가는 최단거리를 정리할 수 있는 방법이다. start 노드에서 end 노드를 가는데, 중간에 어떤 노드를 들러서 갔을 때 더 좋은 결과가 나오면 갱..
[ 백준 17281 ] ⚾ 야구 구현 문제 # 문제링크 www.acmicpc.net/problem/17281 17281번: ⚾ ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종 www.acmicpc.net DFS로 타자들의 순서를 정하고, 시뮬레이션을 돌려주었습니다. 그냥 뭐 생각할 것도 없고, if 문 여러 개 해서 조건만 맞추어서 돌려주었습니다. 시뮬레이션 문제는 진짜 문제 꼼꼼하게 읽고 그대로! 코드로 구현하는 게 중요한 거 같아요.. # 제출 코드 #include using namespace std; int N; int order[10]; int map[51][10]; bool chk[10]; in..
[백준 9205] 맥주 마시면서 걸어가기 (C++) DFS, BFS 풀이 # 문제링크 www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 이걸 첨에는 현재 좌표부터 1000m 거리 이내에 있으면 다 해보면 된다고 생각해서 DFS로 짰는데 시간초과가 났다. 사실 편의점의 갯수 n 이 100이니까 그냥 100개의 노드에서 DFS를 돌리면 시간초과는 당연한 결과다. 좌표값들을 정렬한다음에 우선순위로 하면 되지 않을까? 이런 생각도 했었는데, 잘못된 방법이었다. 결론 먼저 말하면, BFS로 풀거나, DFS로 풀때는 이미 방문한 노드를 ..
[백준 11967] 불켜기 (C++) BFS풀이 # 문제링크 www.acmicpc.net/problem/11967 11967번: 불켜기 (1, 1)방에 있는 스위치로 (1, 2)방과 (1, 3)방의 불을 켤 수 있다. 그리고 (1, 3)으로 걸어가서 (2, 1)방의 불을 켤 수 있다. (2, 1)방에서는 다시 (2, 2)방의 불을 켤 수 있다. (2, 3)방은 어두워서 갈 수 없으 www.acmicpc.net vector[][]를 만들어서 (x,y)좌표에 있는 스위치 위치를 push 해주었다. (1,1) 좌표부터 시작해서, 1) 좌표에 있는 스위치 불 켜기 2) 불을 새로 켰으면, 해당 위치부터 다시 BFS 돌리기위해서 visited와 queue 초기화 3) 네 방향으로 탐색하면서 불 켜져있는 곳으로 이동 이렇게 진행해줬는데, 한 번 스위치를 켰으면 ..
[ 백준 15685 ] 드레곤 커브 # 문제링크 www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 처음에 읽고 나서, 어떻게 풀어야 할 지 전혀 감이 안왔던 문제다.. 저거를 어케 저케 돌리지? 요즘에는 어려우면 빨리 검색해서 접근법을 알아보는데, 결국 방향을 90도로 돌릴 때 규칙을 활용해서 푸는 문제였다. 각 뱡향이 있는 선분을 90도로 돌리면 방향이 +1씩 된다. 그리고 해당 방향을 저장해뒀다가 다음번 세대 돌릴 때 최근 추가된거부터 쭉쭉 체크해주면 된다. 90도..
[ 백준 14890 ] 경사로 / SWEA 활주로 건설 문제 # 문제링크 www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 이건 SW Expert Academy에서 풀었던 활주로 건설 문제와 같은 문제다! 한 번 풀었기 때문에 접근법을 알고있어서 금방 풀었다. 시뮬레이션 문제는 어렵다기 보다는.. 정신을 똑바로 차리는 게 가장 중요한 것 같다.. 일차원 배열 arr 을 하나 만들어서 한 줄씩 살펴보았다. 그렇게 모든 맵을 탐색하고 나서, 90도 회전해서 한 번 더 검사해준다. 그럼 세로 방향을 따로 만들지 않아도 된다.. # 제출 코드 #in..
[ 백준 14889 ] 스타트와 링크 C/C++ DFS # 문제링크 www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 이것도 Depth 가 최대 10이라서 DFS로 팀을 나눠주고, 팀 배정에 따라 map 에서 계산만 해주면 되는 문제였다. 근데 (1, 2), (3, 4) 이나 (2, 1), (4, 3) 이나 같은 팀이다. 이걸 생각도 안해보고 구현만 바로 해서 제출하니 시간초과가 났다. 테케 답은 맞게 나오니,, 원인도 제대로 모르고 괜히 배열 인덱스만 만져보다가 나중에 해당 원인을 알게 되었다. 그래서 중복 없는 조합으로 짜주었다. ..