본문 바로가기

반응형

PS

(326)
[BOJ] 백준 24060 알고리즘 수업 - 병합 정렬 1 (Swift) 문제 https://www.acmicpc.net/problem/24060 24060번: 알고리즘 수업 - 병합 정렬 1 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109) www.acmicpc.net 풀이 병합 정렬의 동작과정을 안다면 조금 더 쉽게 이해할 수 있습니다. 모른다면.. 일단 의사코드를 Swift 언어로 풀어서 작성해봅시다. 의사코드를 작성하는데 주의점이 하나 있습니다. merge 함수에서 t를 1번 인덱스로 초기화하는데, 이를 0으로 바꿔줍시다. 의사코드가 작성이 되었다면 병합 정렬이 정상적으로 동작이 될 것입니다. 이제 K번..
[BOJ] 백준 25501 재귀의 귀재 (Swift) 문제 https://www.acmicpc.net/problem/25501 25501번: 재귀의 귀재 각 테스트케이스마다, isPalindrome 함수의 반환값과 recursion 함수의 호출 횟수를 한 줄에 공백으로 구분하여 출력한다. www.acmicpc.net 풀이 이 문제는 팰린드롬인지 판별하고, 판별하는데에 recursion 함수가 몇 회 호출하는지 횟수를 출력해주는 문제입니다. recursion 함수를 확인하면, 팰린드롬인지 아닌지를 맨 앞 인덱스, 맨 뒤 인덱스의 요소가 같은지 확인하고 다르다면 0을 리턴, 같다면 인덱스를 한 칸씩 옮겨서 다음 인덱스를 확인합니다. 그 후, 전부 같다면 1을 리턴하게 됩니다. 저는 작성된 recursion 함수를 Swift 언어로 옮겨서 작성하였고, 호출 횟수..
[BOJ] 백준 10870 피보나치 수 5 (Swift) 문제 https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 풀이 피보나치 수는 dp, 재귀함수 등으로 구할 수 있습니다. 최대 n이 20이기 때문에 재귀함수로 구현을 해보겠습니다. 먼저 n이 2보다 작다면 n을 리턴해주면 됩니다. 왜냐하면 0번째 수는 0, 1번째 수는 1이기 때문입니다. n이 2보다 크다면? 피보나치 수를 구하는 함수의 파라미터로 n - 1(전)과 n - 2(전전)을 더해준 값을 리턴해주면 됩..
[BOJ] 백준 10872 팩토리얼 (Swift) 문제 https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 풀이 팩토리얼을 구하는 방법으로는 for문, 재귀함수 등 으로 구현할 수 있습니다. for문을 사용하면 단순히 1 ~ n 까지 곱해주면 되겠죠? 재귀함수로는 어떻게 풀 수 있을까요? n이 0이나 1일때는 1을 return 해주고 n이 1보다 크다면 n * factorial 함수의 (n - 1)을 호출해주면 되겠죠?? 예를들어 3! 을 구한다고 하면 n이 3이므로 3 * factorial(n: 2) 호출 n이 2이므로 2 * factorial(n: 1) 호출 n이 1이므로 1 return fact..
[BOJ] 백준 11478 서로 다른 부분 문자열의 개수 (Swift) 문제 https://www.acmicpc.net/problem/11478 11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 풀이 문자열 S의 서로 다른 부분 문자열의 개수를 구하는 문제입니다. 부분 문자열은 어떻게 구할 수 있을까요? "abcd"라는 문자열이 있다면, 첫번째 인덱스부터 다섯번째 인덱스 전까지 a, ab, abc, abcd 두번째 인덱스부터 다섯번째 인덱스 전까지 b, bc, bcd 세번째 인덱스부터 다섯번째 인덱스 전까지 c, cd 네번째 인덱스부터 다섯번째 인덱스 전까지 d 이러한 구조는 2중 for문으로 쉽게 구현할 수 있습니다. 2중 for문을 돌면서, 만들어..
[BOJ] 백준 1269 대칭 차집합 (Swift) 문제 https://www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 풀이 (A 차집합 B) 요소의 개수 + (B 차집합 A) 요소의 개수를 출력해 주는 문제입니다. 즉, 대칭 차집합의 원소의 개수를 출력해주는 문제입니다. A와 B를 Set 자료형으로 만들어 준 후, for문을 통해 A에 포함되지 않는 B의 요소 + B에 포함되지 않는 A의 요소를 구할 수도 있지만, Swift의 Set 자료형에서는 subtracting라는 차집합 메서드가 구현되어 있습니..
[BOJ] 백준 1764 듣보잡 (Swift) 문제 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 풀이 듣보잡은 듣도 못한 사람과 보도 못한 사람 둘 다 포함되는 사람입니다. 듣도 못한 사람들을 먼저 입력받게 되는데 Set 자료형에 넣어줍니다. 그 이후 보도 못한 사람들을 입력받으면서 듣도 못한 사람에도 포함이 된다면, 듣보잡 이기 때문에 듣보잡 배열에 넣어줍시다. 듣보잡 배열의 크기를 출력하고, 듣보잡 배열을 사전순으로 정렬하여 듣보잡 명단을 출력해주면 끝 입니다. 소스코드 후기 Se..
[BOJ] 백준 10816 숫자 카드 2 (Swift) 문제 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 풀이 상근이가 가지고 있는 숫자 카드를 Dictionary 자료형으로 만들어주면 쉽게 풀이할 수 있습니다. Dictionary의 생성자 중 Dictionary(keysAndValues: Sequence, uniquingKeysWith:(_, _) throws -> _)를 사용하여 중복된 키의 value를 합쳐주는 기능을 작성할 수 있습니다. 그 이후 숫자카드..

반응형