본문 바로가기

연습17

[Swift][BruteForce] 백준 15658번 (연산자 끼워넣기 (2)) 요구능력 : 재귀함수 코드설명 : 내가 처음에 시간초과가 났던 코드는 문자열에 모든 연산자를 집어넣고 그 연산자를 백트래킹하면서 모든 경우의수를 다 세보는 코드다. 처음에는 연산자끼워넣기랑 똑같이 풀었다. 그러다 블로그를 서칭하던중에 내가 쓴 코드가 범위를 한참초과해서 시간초과가 난다는것을 알게되었다. 수의 개수는 최대 11개까지 들어온다. 그럼 연산자의 개수는 한번의 연산에 최대 10개를 쓸 수 있다. 그리고 연산자는 최대 4N개가 주어지니까 44개에서 10개를 뽑으면 44C10이 되고, 이걸 정렬하는 데는 연산자의 개수만큼 걸리니 44C10 * 10이 나온다. 그럼 시간초과가 나게된다. (다른분들은 다 11이라고 적으셧던데 저는 10이라고 생각해서 10으로 적었습니다. 틀렸다면 이유좀 댓글로 부탁드립.. 2021. 12. 27.
[Swift][BruteForce] 백준 14888번 (연산자 끼워넣기) 요구능력 : 백트래킹과 문자열 코드설명 : 연산자를 배열에 다 넣어준다. var temp = [Character]() var operArr = operandArr for i in 0..= 1 { if i == 0{ temp.append("+") operArr[i] -= 1 }else if i == 1{ temp.append("-") operArr[i] -= 1 }else if i == 2{ temp.append("*") operArr[i] -= 1 }else if i == 3{ temp.append("/") operArr[i] -= 1 } } } 연산자를 백트래킹 하면서 경우의수를 모두 계산해준다. func dfs(_ depth: Int){ var p = 1 var result = arr[0] if de.. 2021. 12. 24.
[Swift][DP] 백준 15989번 (1, 2, 3 더하기 4) 요구능력 : DP점화식 코드설명 : 기존의 1,2,3더하기와 비슷한데 "합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다."라는 조건이 붙었다. 1,2,3더하기 문제는 특징이 있는데 1과 2와 3을 기준점으로 세우고 해당하는 수가나오도록 더하는것이다. 예를들어서 4가있으면 3 + 1 2 + 2 1 + 3 이런식으로 기준을 1,2,3으로 두고 문제를 풀면된다. 중복된 수의 순서가 안나오려면 1,2,3을 기준으로 두고 뒤에 나오는수가 작거나같으면된다. 예를들어 4가있으면 1뒤에는 1보다 작거나 같은 수가 나와야한다. 1 + 1 + 1 + 1 2뒤에는 2보다 작거나 같은 수가 나와야한다. 2 + 2, 2 + 1 + 1 3뒤에는 3보다 작거나 같은 수가 나와야한다. 3 + 1 이렇게 4가지 나오게된다... 2021. 12. 18.
[Swift][DP] 백준 11048번 (이동하기) 요구능력 : DP문제 인식능력 코드설명 : 이 문제는 BFS로도 풀릴거 같긴한데 고생의 지름길이다. DP로 접근할 수 있는 이유는 나는 개인적으로 예제 입력 1을 그려보고 갈 수 있는 방향을 그려보니 문제에서 주어진 방향으로만 이동해도 한 좌표에 모든경우의 수가 들어와서 좌표에 들어오는 값들중에 max값을 저장하면 되겠다고 생각했다. 후기 : BFS로 접근하고 풀어보다가 시간초과까지는 해결했는데 메모리초과까지 나버려서 포기하고 DP로 풀어야겠다생각하니까 답이 금방나와버렸다.. 뭔가 나처럼 처음접근은 거의다 BFS로 하실듯..? let nm = readLine()!.split(separator: " ").map{Int(String($0))!} let n = nm[0] let m = nm[1] var arr.. 2021. 12. 15.