본문 바로가기

연습17

[Swift][DP] 백준 9251번 (LCS) 요구능력 : DP 코드설명 : https://www.youtube.com/watch?v=EAXDUxVYquY 이곳에 설명을 아주 잘해주시는 교수님이 계십니다. 후기 : 여태 야매로 풀던 DP를 제대로 푸는방법을 배운것같은 강의였다. let x = readLine()!.map{String($0)} let y = readLine()!.map{String($0)} var dp = Array(repeating: Array(repeating: 0, count: y.count + 1), count: x.count + 1) for i in 1...x.count{ for j in 1...y.count{ if x[i - 1] == y[j - 1]{ dp[i][j] = dp[i - 1][j - 1] + 1 }else{ d.. 2022. 3. 10.
[Swift][BFS] 백준 12906번 (새로운 하노이 탑) 요구능력 : Set, BFS 코드설명 : 원판움직이는 경우를 BFS로 표현하는것은 어렵지 않다. A에 원판이 있는경우 하나를 빼서 B에 넣는경우를 큐에 넣어주고 C에 넣는경우를 큐에 넣어주면된다. B와 C도 마찬가지로 하면된다. 이 문제에서 가장 중요한점은 방문처리를 어떻게 하느냐이다. 나는 처음에 방문처리를 안했다가 무한루프에 빠지고 말았다. 이런문제를 나처럼 처음 접하는 사람들은 당황하게 될 것이다. 방문처리를 해야되는데,, 문자열이네? 여태 좌표만 방문처리해봐서 문자열은 할줄 모르겠다 싶었다. Set을 활용하면 되더라. 다른 언어들은 Set에 큐에 사용한 형식그대로 사용하는데, Swift는 따로 custom을 해줘야한단다. 그냥 String으로 처리해줘야겠다. 각 모든 배열을 joined()로 st.. 2022. 2. 16.
[Swift][DFS][BFS] 백준 17142 (연구소 3) 요구능력 : 백트래킹과 BFS 코드설명 : 연구소 2 문제를 안풀었다면 먼저 풀고오는게 맞는거같다. 연구소2 문제와 다른점만 설명하고 넘어가겠다. 연구소2 같은경우에는 선택되지 않은 바이러스는 그냥 빈칸처럼 사용했다. 연구소3 에서는 비활성바이러스를 활성바이러스로 바꾸기위해서 해당 바이러스를 활성화해서 큐에 넣어야한다. 그런데 어려워보이고 정답비율이 낮은이유가 "활성 바이러스가 비활성 바이러스가 있는 칸으로 가면 비활성 바이러스가 활성으로 변한다." 위 설명 때문이다. 말이 어렵지 그냥 빈칸없으면 정답이된다. 왜? 핵심적으로 봐야될 부분은 "활성바이러스가 비활성 바이러스가 있는 칸으로 간다."는 것이다. 그럼 활성바이러스가 비활성바이러스로 갈 때는 결국 세줘야한다. 빈칸처럼 쓰는거랑 그럼 차이점이 뭐냐?.. 2022. 2. 11.
[Swift][BruteForce] 백준 16198번 (에너지 모으기) 요구능력 : 백트래킹 코드설명 : 문제에서의 핵심 1. 구슬 하나를 고른다.(단, 첫번째구슬과 마지막구슬을 고르면 안됨) 2. x번째 에너지구슬 제거(고른 구슬을 제거해야한다.) 3. Wx-1 * Wx+1 의 에너지모음( Wx-1 * Wx+1의 모든경우를 합해야한다.) 4. N을 1감소시킴. 구슬 1~N까지 다시 번호매김. 예제 4 1 2 3 4 가있다. 2를 고르면 Wx-1 * Wx+1이 1 *3이 된다. 그리고 첫번째와 마지막은 못고르니까 3을 고른다. 3을 고르면 Wx-1 * Wx+1이 1 * 4가 된다. 그럼 에너지는 총 8이 모인다. 맨 처음에 3을 고른다. 그럼 Wx-1 * Wx+1이 2*4가 된다. 그 다음 2를 고르면 Wx-1 * Wx+1이 1 * 4가 되서 12가 나온다. 이렇게 어느 구.. 2022. 1. 14.