dfs32 [Swift][BruteForce] 백준 2529번 (부등호) 요구능력 : 백트래킹에 대한 이해 코드설명 : 맨 아래에 수정된 코드있습니다. 이 문제는 0~9까지의 수 중에서 부등호의 갯수 +1 개만큼의 수를 뽑아서 부등호 조건에 맞출 수 있는지를 묻는 문제이다. 문제에서 요구하는 부분 1. 부등호의 개수 + 1개 만큼의 수 2. 뽑은 수를 가지고 부등호 조건을 만족하는지 확인 3. 부등호 조건을 만족하는 수들의 최소값과 최대값 출력 1. 1번부터 해결하면 n과m문제를 떠올리면 된다. 이 문제에서는 0부터 9까지의 수 중에서 선택하라고 했고 선택된 숫자는 모두 달라야한다고 했으므로 방문처리까지 해주면서 방문하는 수를 k + 1 (부등호의 개수 + 1)개 뽑았을 때 부등호조건에 비교하기위해서 result라는 배열에 저장해줬다. for i in 0...9 { if !.. 2021. 11. 8. [Swift][DFS] 백준 2667번 (단지번호붙이기) 요구능력 : 문제의 조건과 DFS에 대한 이해 코드설명 : 문제를 보면 단지를 전부 돌아봐야 할 것 같다. 전부 돌면서 1이 뭉쳐있는곳은 하나의 단지라고 본다. 1이 뭉쳐있는곳을 DFS로 돌려서 모두 탐색해봐야한다. 그렇다면 아직 방문하지 않은곳이면서 1인좌표를 찾아서 dfs를 돌면된다. for i in 0..= 0 && ny < n { if arr[nx][ny] == 1 && !visited[nx][ny] { dfs(nx, ny) } } } } 후기 : 비슷한류의 문제를 겪어본적이 있는거같은데...뭐더라 let n = Int(String(readLine()!))! var arr: [[Int]] = [[]] var visited = Array(repeating: Array(repeating: false.. 2021. 11. 5. [Swift][BruteForce] 백준 15661번 (링크와 스타트) 요구능력 : 백트래킹에 대한 이해 코드설명 : 스타트와 링크와 문제가 조금 다르긴하지만 똑같은 방식으로 풀었는데, 맞았다. 설명이 필요하신분은 스타트와 링크를 봐주세요. 스타트와 링크와 다른점은 이 문제에는 N이 홀수로도 들어온다는 것이다. 스타트와 링크 코드를 링크와 스타트에 넣으면 틀렸다고 나오는데.. 이유는 모르겠고 똑같이 풀어도 맞을 수 밖에 없는 이유를 적어보자면, 두팀의 능력치를 빼서 작은값이 나오는 경우는 두 팀이 그래도 인원수가 비슷한경우에 이루어진다. 만약 5명이라면, 2명 3명 이런식이다. 그래서 depth가 n/2인 경우에 멈춰도 되는거다. 후기 : 막 어려운건 아니지만, visited가아니고 딴 배열에 저장해서 찾느라 시간 좀 걸렸다. let n = Int(String(readLin.. 2021. 11. 5. [Swift][BruteForce] 백준 14889번(스타트와 링크) 요구능력 : 백트래킹에 대한 이해 코드설명 : 이 문제는 팀을 n명중에서 n/2명을 뽑아야된다는게 핵심이다. 그래서 나는 n과 m을 떠올려서 백트래킹 방법으로 팀부터 뽑았다. 다음으로, 내가 스타트팀원들을 뽑았으니까 링크팀원들은 자동적으로 스타트팀원들을 뺀 사람들이 되겠다. 스타트팀원들을 n/2명을 뽑으면 맨 아래 for문에서 방문처리가 되게된다. 그럼 방문처리가 안된 사람들이 링크팀원들인 것이다. n/2명을 뽑았을 때 team1과 team2를 0으로 초기화해준다.(이전에 뽑았던 값을 재사용하게 되는 경우가 없게하기 위함) 그리고 for문으로 arr배열의 전체 인덱스를 돌아주면서 방문하지 않은것은 링크팀(team2)원들이기 때문에 방문하지 않은경우에 team2에 더해주고 방문했다면, 맨 아래에서 뽑은 스.. 2021. 11. 4. 이전 1 2 3 4 5 6 7 8 다음