본문 바로가기

BruteForce8

[Swift][BruteForce] 백준 2003번 (수들의 합 2) 요구능력 : 반복문의 활용 코드설명 : 이 문제는 수를 연속해서 더해줘야된다는게 핵심이다. 연속해서 더해주다가 원하는 수가 나오려면 시작지점이 계속해서 바뀌는 방법이 있다. 예제 10 5 1 2 3 4 2 5 3 1 1 2 를 보면 5가 나오려면 2 + 3, 5, 3 + 1 + 1이 나와야 한다. 1에서 시작하면 뒤에 아무리 더해도 5가 안나온다. 2에서 시작하면 2 + 3이되서 5가된다. 3에서 시작하면 다음에 4를 더하니 불가능하다. . . 5에서 시작하면 5니까 뒤에 안더해도 나왔다. 3에서 시작하면 3 + 1 + 1이니까 5가 나온다. . . 이렇게 풀면된다. 후기 : 간만에 간단한문제를 푼거같다. let nm = readLine()!.split(separator: " ").map{Int(Stri.. 2021. 12. 28.
[Swift][BruteForce] 백준 15658번 (연산자 끼워넣기 (2)) 요구능력 : 재귀함수 코드설명 : 내가 처음에 시간초과가 났던 코드는 문자열에 모든 연산자를 집어넣고 그 연산자를 백트래킹하면서 모든 경우의수를 다 세보는 코드다. 처음에는 연산자끼워넣기랑 똑같이 풀었다. 그러다 블로그를 서칭하던중에 내가 쓴 코드가 범위를 한참초과해서 시간초과가 난다는것을 알게되었다. 수의 개수는 최대 11개까지 들어온다. 그럼 연산자의 개수는 한번의 연산에 최대 10개를 쓸 수 있다. 그리고 연산자는 최대 4N개가 주어지니까 44개에서 10개를 뽑으면 44C10이 되고, 이걸 정렬하는 데는 연산자의 개수만큼 걸리니 44C10 * 10이 나온다. 그럼 시간초과가 나게된다. (다른분들은 다 11이라고 적으셧던데 저는 10이라고 생각해서 10으로 적었습니다. 틀렸다면 이유좀 댓글로 부탁드립.. 2021. 12. 27.
[Swift][BruteForce] 백준 1748번 (수 이어쓰기 1) 요구능력 : 식을 잘 만들 수 있는지 코드설명 : i를 자릿수라고 생각하자. 1의 자리가 있는 수 i가 1일때 count += n - 1 + 1이다. 10의 자리가 있는 수 i가 10일때 count += n - 10 + 1이다. 100의 자리가 있는 수 i가 100일때 count += n - 100 + 1이다. 101이라는 수가 n으로 들어왔다고 가정해보자. 이해하기 쉽게 역순으로 설명해보자면, i가 100일때 count += 101 - 100 +1 이다. 100의 자리에는 100과 101두개가 들어가므로 2가 나온다. i가 10일때 count += 101 - 10 + 1이다. 10의자리부터는 10~101까지이므로 92개가 나온다. i가 1일때 count += 101 - 1 + 1이다. 1의자리부터는 1.. 2021. 11. 23.
[Swift][BruteForce] 백준 1107번 (리모컨) 요구능력 : 조건과 브루트포스를 떠올릴 수 있는지 코드설명 : 문제의 핵심 1. +, - 버튼으로 이동했는지 2. 버튼을 눌러서 이동했는지 나는 0부터 1000000까지의 모든 채널을 다 이동해보면서 n까지 가장 조금이동해서 도달할 수 있는 경우를 저장하고 출력하는 방법을 채택했다. 자세한 설명은 코드에 주석으로 다 적어놨는데 브루트포스라서 더 이상의 설명은 필요없을것같다. 후기 : 내가 풀어본 브루트포스중에 제일 어려웠던문제,, var n = Int(String(readLine()!))! let m = Int(String(readLine()!))! var arr: [Int] = [] if m != 0 { arr = readLine()!.split(separator: " ").map{Int(String(.. 2021. 11. 23.