Algorithm123 [Swift][DP] 백준 11053번 (가장 긴 증가하는 부분수열) 요구능력 : DP의 응용 코드설명 : 이 문제는 앞에있는 숫자가 자기자신보다 작은 숫자의 갯수를 세는것이다. 1. 배열에서 현재 i가 위치한 배열의 앞부분에 현재 arr[i]의 수보다 작은게 있으면 그 자리의 dp는 dp[i]와 dp[j] + 1 중 큰 수를 dp[i]에 넣는다. 그 이유는 디버깅해보면 알겠지만, [10, 20, 10, 30]과 같은 경우에 10일 때는 dp[0] = 1 20일 때는 dp[1] = 2 10일 때는 dp[2] = 1 30일 때는 dp[3] = 3 이 된다. 후기 : 증가하는 부분수열의 점화식은 처음에 구했는데 왜 답이 안나왔었는지 멀리돌아서 왔다. let a = Int(readLine()!)! var arr = readLine()!.split(separator: " ").m.. 2021. 9. 22. [Swift][문자열] 백준 10973번 (이전순열) 요구능력 : 문자열의 이해 코드설명 : 이 문제는 딱 세가지만 알면 쉽다. 첫째, 큰수 > 작은수 둘째, 내림차순 셋째, 큰수 > 작은수에서 큰수보다 작으면서 맨 마지막에 있는 인덱스 처음에 문제를 풀때 다음순열과 비슷한 방식으로 접근했다. 그래서 수를 나열 해봤는데 아래와 같은 규칙이 나왔다. . . . 1 2 4 5 3 1 2 4 3 5 1 2 3 5 4 1 2 3 4 5 우선 쭉 보면서 어디가 바뀌는지 찾아보자. 1. 1 2 4 5 3 -> 1 2 4 3 5 2. 1 2 4 3 5 -> 1 2 3 5 4 1번은 5와 3의 자리가 바뀌었고 2번은 4와 3과 5의 자리가 바뀌었다. 직접 적으면서 해보면 알겠지만, 왼쪽부터 오른쪽으로 수를 돈다고 가정할 때, 큰수 > 작은수 가 되는 부분이 있다. 수를 .. 2021. 9. 16. [Swift][문자열][LV_1][프로그래머스] 2주차_상호평가 요구능력 : 문자열의 이해 코드설명 : 1. newScore에 따로 넣어준 이유는 한 행에 최대값과 최소값이 1개 초과로 있는지 확인하기 위함이다. 이렇게 한 행에 한 학생의 점수를 넣어줘야 보기도 편리한것같다. 2. i == j는 자기 자신이 채점했을 때를 의미하고, 자기자신이 채점한 인덱스값이 첫번째 최대값 인덱스 값과 같으면 자기자신이 채점한 값이 최대값이라는 의미이다. 여기서 핵심은 자기자신이 채점한 인덱스가 첫번째 최대값 인덱스와 같고, 자기자신이 채점한 인덱스가 마지막 최대값 인덱스와 같으면 유일한 최대값이라는 것이다. 이해가 안갈수도 있으니, 반대의 경우도 적어보자면 자기자신이 채점한 인덱스가 첫번째 최대값 인덱스와 같고, 자기자신이 채점한 인덱스가 마지막 최대값 인덱스와 다르다면 최대값이 .. 2021. 9. 14. [swift][구현] 백준 16935번 (배열 돌리기 3) 요구능력: DFS와 BFS 그리고 스택과 큐의 이해 코드설명 : 1. 1번 배열을 상,하 반전 이건 arr이 2차원 배열이기 때문에 reverse()하면 arr[i][j]일 때, arr[i]의 순서가 거꾸로 되므로 상하반전이 된다. 2. 2번 배열을 좌, 우 반전 좌, 우 반전은 arr[i][j]에서 j(열)을 반전시켜주면 된다. 3. 배열을 오른쪽으로 90도 회전 이 부분에서 조금 헤맸다. n과 m을 스왑안해줘서 원하는 결과가 계속 안나왔다. n과 m을 스왑해줄거면 resultArr도 새로 생성해줘야한다. 어차피 밑에서 arr에 다 넣어주기 때문에 저장은 되어있다. 그리고 배열문제를 잘 푸려면 인덱스 활용을 잘해야된다. resultArr이 0,0일 때 arr은 5,0을 내주어야 한다. 이런식으로 쭉 나.. 2021. 9. 10. 이전 1 ··· 13 14 15 16 17 18 19 ··· 31 다음