본문 바로가기

코딩테스트90

[Python] 백준 2884번 (알람 시계) 문제 https://www.acmicpc.net/problem/2884 2884번: 알람 시계 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, www.acmicpc.net 풀이방법 이 문제의 경우 조건문을 활용할 수 있는지를 테스트해보는 문제이다. 시간이 0일때, 분이 45분보다 작은경우 45분을 빼면 시간은 23시로 가야하기 때문에 분이 45보다 작을때, 시간이 0이면 시간을 24로 바꿔주었다. 그리고 시간에 60을 곱함으로써 시간도 분으로 바꿔서 계산한것이다. 그렇게 전체 분에서 45를 빼고 다시 시간 분으로 바꿔주면 문제는 끝난다. 코드 h, m = map(int.. 2022. 2. 5.
[Swift][BFS] 백준 2234번 (성곽) 요구능력 : BFS 코드설명 : 1) 이 성에 있는 방의 개수 BFS를 도는 횟수가 방의 개수가 되겠다. BFS를 한번 돌게되면 벽에 막혀서 방문이 끝나게 된다. 방문하지 않은 곳의 배열을 모두 돌면서 방문처리를 해준다면 bfs를 도는 수 만큼이 방의 개수가 되겠다. 2) 가장 넓은 방의 넓이 큐에 append할 때 마다 방의 넓이는 count를 증가시켜줘야한다. 큐에 넣을때마다 증가시켜주지 않고 큐에 이동횟수를 붙여서 세게되면 모든 칸의 수를 다 세야하는데 아래와 같이 모든 경우의 수를 세지 못한다. 3) 하나의 벽을 제거하여 얻을 수 있는 가장 넓은 방의 크기 마찬가지로 2진수를 이용하여 있는 벽만 하나씩 지워보면서 arr을 전부 돌아보면된다. 후기 : 생각도 못한 &연산.. 비트연산문제를 한번도 안.. 2022. 2. 3.
[Swift][BFS][시간초과] 백준 4991번 (로봇 청소기) 요구능력 : BFS 코드설명 : 내가 생각하는 이 문제에서의 핵심 1) 같은 칸 여러번 방문 가능 2) 인접한 칸 1) 같은 칸 여러번 방문가능 이걸보고 처음에 그냥 방문처리없이 BFS를 쭉 돌렸는데 절대 답이 안나왔다. 이유는 아래 그림에서 빨간색으로 가는경우와 파란색으로 가는경우가 있는데, 그냥 BFS를 돌리면 이런 경우가 구분이 가지 않았다. 그래서 생각을 해본 결과 계속해서 가장 가까운곳의 더러운곳을 먼저 방문하면 결국 가장 적게이동하고 모든 더러운곳을 방문하는게된다. 그래서 BFS로 가장 가까운 더러운곳을 찾아서 거기까지 이동한 횟수를 전역변수 cnt에 더하는 작업을 더러운칸이 존재한다면 반복했다. 아, 그리고 가장 가까운곳 찾을 때 각각의 경우에 방문처리를 다르게 해줘야한다. 이유는 로봇청소기.. 2022. 2. 3.
[Swift][BFS] 백준 17086번 (아기상어2) 요구능력 : BFS 코드설명 : 후기 : 기초적인 BFS문제인것 같다. 아기상어보다 아기상어2 난이도가 훨씬낮다. let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] var arr = [[Int]]() let dx = [-1, 1, 0, 0, -1, 1, 1, -1] let dy = [0, 0, -1, 1, 1, -1, 1, -1] for _ in 0.. idx { let pop = queue[idx] let x = pop.0.0 let y = pop.0.1 let safeDistance = pop.1 idx += 1 if arr[x][y] == 1 { result.append(safeDis.. 2022. 1. 28.