Algorithm236 [Swift][프로그래머스][LV_2] 주차 요금 계산 요구능력 : 문제 이해능력 코드설명 : 무슨 알고리즘을 썻다기 보다는 문제를 이해하고 어떤방식으로 풀어나갈 수 있는지를 보는 문제같다. 내가 생각하는 이 문제에서 핵심 1) 차량번호와 입출차시간을 어떻게 저장할 것인지 2) 시간계산을 분으로 바꿔서 할 줄 아는지 3) 문자열을 다룰줄 아는지 4) 출차시간이 없을때 처리를 어떻게 할 것인지 5) 나머지 올림을 어떻게 처리할 것인지 1)의 경우 차량번호별로 입출차시간을 배열로 받아서 입출차 시간을 저장한다. var carNumTimeDict = [String: [Int]]()//차량번호, 입출차시간 2)과 3)의 경우 문자열을 분리해서 시간을 분으로 환산해서 1)의 딕셔너리에 저장해주었다. for i in records{ let a = i.split(sepa.. 2022. 2. 21. [Swift][DP] 백준 2294 (동전 2) 요구능력 : DP 코드설명 : dp의 초기값을 10001로 설정해준 이유는 이 문제가 최솟값을 찾는 문제이기 때문에 최대값으로 설정해준것이다. 10001이 최댓값인 이유는 k의 범위가 10000까지 이기때문에 여기서 나올 수 있는 가장 큰 수는 1로 10000까지 만들어서 1이 10000개인 경우이다. 위의 사진은 직접 행과 열로 나열해서 사용해야하는 동전의 개수를 적은것이다. 1원으로 1~15까지 만들 수 있는 경우의 수는 1개 ~ 15개이다. 하지만, 5원으로 1 ~ 15까지 만드려면? 뭔가 복잡해지는것 같을 수 있다. 우선, 1원으로 1 ~ 15까지 만들어보자. 행과 열을 만들어야겠다. for i in 0.. 2022. 2. 21. [Swift][프로그래머스][LV_1] 신고결과받기 요구능력 : 딕셔너리의 활용 코드설명 : 문제를 풀어봤는데 O(n^2)으로 풀어서 몇개의 테스트케이스에서 시간초과가 나왔다. 신고자와 피신고자의 이름을 맞추다가 시간초과가 난것이다. 이 부분에서 생각을 잘 해야되는데, Dictioary의 특성상 키는 중복되지 않는다. 그리고 신고한사람이 자신이 신고한사람의 목록을 갖고있어봐야 소용이없다. 그래서 피신고자(신고당한사람)가 신고자를 Dictionary에 저장하고 자신을 신고한 사람이 k명이 넘을경우, 자신을 신고한 사람에 1씩 더해줌으로써 경고메일을 표현해준다. 이 문제는 이게 핵심이다. for i in toDict{ if i.value.count >= k { for v in i.value{ receiveDict[v]! += 1 } } 후기 : 커다란 사고가.. 2022. 2. 19. [Swift][DFS] 백준 18290번 (NM과 K(1)) 요구능력 : DFS 코드설명 : DFS문제이지만, 마냥 순열로 풀어버리면 DFS에 O(n^2)이 나와버려서 통과가 안된다. 그래서 처음에는 선택으로 가려고 x와 y둘다 이전에 방문했던 부분 다음 부분부터 방문하게했더니 , 그렇게 하면 탐색하는 줄이 다음줄로 넘어가도 y좌표도 이전에 방문했던 부분의 다음부분부터 방문해버리는 문제가 생겨서 x만 중복을 최대한 줄이는 쪽으로 문제를 해결했다. 이거 외에 이 문제에서 핵심이라고 볼만한것은 바로 이 부분이다. func check(_ x: Int, _ y: Int) -> Bool{ for i in 0..= n || ny = m{ continue } if visited[nx][ny] { //현재 좌표와 인접한 곳이 이전에 방문한적 있었다면 현재좌표.. 2022. 2. 17. 이전 1 ··· 16 17 18 19 20 21 22 ··· 59 다음