본문 바로가기

반응형

Swift

(356)
[BOJ] 백준 24262 알고리즘 수업 - 알고리즘의 수행 시간 1 (Swift) 문제 https://www.acmicpc.net/problem/24262 24262번: 알고리즘 수업 - 알고리즘의 수행 시간 1 오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시 www.acmicpc.net 풀이 문제에 주어진 알고리즘의 수행시간은 빅오 표기법으로 $O(1)$ 입니다. n에 따라 수행시간이 전혀 변화가 없습니다. 따라서 수행횟수는 1 최고차항의 차수는 n이 존재하지 않기 때문에 0 입니다. 소스코드 후기 시간복잡도를 계산하는 방법을 알면 아주 쉬운 문제입니다.
[BOJ] 백준 9506 약수들의 합 (Swift) 문제 https://www.acmicpc.net/problem/9506 9506번: 약수들의 합 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라. www.acmicpc.net 풀이 먼저, 입력받은 n의 약수들을 구하는 로직을 작성해야 합니다. n을 1 ~ n까지 하나씩 나누어 떨어지는지 확인하면서, 약수를 구하는 방법이 있지만, 1 ~ $\sqrt{n}$까지 확인하는 방법이 더 빠릅니다. 예를 들어 18 이라는 수가 있다면, 1 * 18 2 * 9 3 * 6 6 * 3 9 * 2 18 * 1 과 같이 대칭을 이룹니다. $\sqrt{18}$은 약 4.2 입니..
[BOJ] 백준 2501 약수 구하기 (Swift) 문제 https://www.acmicpc.net/problem/2501 2501번: 약수 구하기 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. www.acmicpc.net 풀이 n의 약수를 확인하는 방법중 1 ~ n 까지로 나누어서 나누어 떨어진다면 약수인 것으로 확인할 수 있습니다. 시간복잡도는 $O(n)$ 입니다. 더 빠르게 약수인 수를 판단할 수는 없을까요? 단순히 1부터 n의 제곱근 까지만 확인하는 방법이 있습니다. 1 ~ $\sqrt{n}$ 까지 수를 확인한 후, 나누어 떨어진다면 그 수가 약수일 것이고, n / i의 수도 약수일 것입니다. 예를 들어 20이란 수가 있다면, 20의 제곱근은 약 4.4로 1부터 4까지의 수를 ..
[BOJ] 백준 5086 배수와 약수 (Swift) 문제 https://www.acmicpc.net/problem/5086 5086번: 배수와 약수 각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다. www.acmicpc.net 풀이 첫번째 숫자를 두번째 숫자로 나눈 나머지가 0 이라면 첫번째 숫자가 두번째 숫자의 배수입니다. 두번째 숫자를 첫번째 숫자로 나눈 나머지가 0 이라면 첫번째 숫자가 두번째 숫자의 약수입니다. 둘다 아니라면, 약수와 배수가 모두 아닙니다. 단순히 조건문을 사용해서 풀이할 수 있습니다. 소스코드 후기 단순히 조건문 사용과, 배수와 약수의 성질에 대해 안다면 쉽게 풀 수 있는 문제입니다. 문제에도 힌트가 있어서 문제를 잘 읽으면 풀 수..
[BOJ] 백준 10798 세로읽기 (Swift) 문제 https://www.acmicpc.net/problem/10798 10798번: 세로읽기 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’ www.acmicpc.net 풀이 n * n 형태의 2차원 배열이라면 세로로 읽는 것은 아주 간단할 것입니다. 하지만 이번 문제의 경우 글자의 개수가 다르기 때문에, 세로로 읽다보면 없는 index에 접근하게 되기 때문에 런타임 에러가 발생할 것입니다. 이것을 어떻게 해결할 수 있을까요? 글자의 개수는 최소 1 ~ 최대 15개 입니다. [5][15] 크기의 2차원 배열을 먼저 만들어주고, 값은 빈 문자열로 초기화..
[BOJ] 백준 25206 너의 평점은 (Swift) 문제 https://www.acmicpc.net/problem/25206 25206번: 너의 평점은 인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치 www.acmicpc.net 풀이 등급과 과목 평점을 어떻게 매치시켜줄 수 있을까요? Swift에서는 Dictionary나 enum을 사용할 수 있습니다. Dictionary를 [String: Double] 과 같은 자료형으로 나타내어 [A+: 4.5, A0: 4.0, ... F: 0] 과 같이 나타내어 매칭시킬 수 있습니다. enum을 사용하면 case ap = 4.5, a = 4.0 ... f = 0 과 같이 enum의 ..
[BOJ] 백준 10988 팰린드롬인지 확인하기 (Swift) 문제 https://www.acmicpc.net/problem/10988 10988번: 팰린드롬인지 확인하기 첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다. www.acmicpc.net 풀이 팰린드롬은 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어 입니다. (우영우가 생각나네요...) reversed() 메서드를 사용하면 문자열을 뒤집을 수 있습니다. 기존 문자열과 뒤집은 문자열을 비교해서 같으면 1, 아니면 0 을 출력해주면 되는 문제입니다. 소스코드 후기 reversed() 메서드를 알면 쉽게 풀 수 있는 문제입니다. reversed()의 반환형이 ReversedCollection 이기 때문에, String으로 한 번 감싸주..
[BOJ] 백준 10812 바구니 순서 바꾸기 (Swift) 문제 https://www.acmicpc.net/problem/10812 10812번: 바구니 순서 바꾸기 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2 www.acmicpc.net 풀이 먼저 1부터 n까지 적힌 바구니를 배열로 만들어 줍시다. 그 이후 i, j, k를 m번 입력을 받아서 순서를 회전해주어야 합니다. i, i + 1 ... k, k + 1... j - 1, j 와 같은 순서로 되어있는 바구니를 k, k + 1 ... j - 1, j ... i, i + 1... k - 1 과 같은 순서로 바꾸어주어야 합니다. 어떻게 순서를 바꿀 수 있을까요? ..

반응형