본문 바로가기

반응형

PS/백준

(318)
[BOJ] 백준 1676 팩토리얼 0의 개수 (Swift) 문제 https://www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 Swift에서 팩토리얼을 직접 계산한다면 최대 500!이라는 큰 수를 기본 자료형인 Int로 나타내기는 어려울 것이다. 다른 방법으로 0의 개수를 구해주어야 한다. 가장 먼저 0이 나타나는 n!은 5이다. $5! = 5 \times 4\times 3\times 2\times 1 = 120$ $5 \times 2 = 10$ 이므로 0의 개수가 1인것을 확인할 수 있다. 5이후 다음 n도 모두 0이 1개 이상은 있을 것이다. 따라서 n에 대해 $5 \times 2 = 10$가..
[BOJ] 백준 2609 최대공약수와 최소공배수 (Swift) 문제 https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 풀이 문제 그대로 최대공약수와 최소공배수를 구하는 문제! 최대공약수는 유클리드 호제법을 사용하면 쉽게 구할 수 있다. 간단하게 설명하면 $gcd(A, 0) = A$ $gcd(B, 0) = B$ $A = B * Q + R$ 이고 $B != 0$이면 $gcd(A, B) = gcd(B, R)$이다. $Q = A / B$ 가 될 것이고, $R = A % B$이다. 이를 재귀함수로 쉽게 구현할 수 있다. 최대공약수를 구했다면, 최소공배수는 어떻게 구할 수 있을까. 어..
[BOJ] 백준 15829 Hashing (Swift) 문제 https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정 www.acmicpc.net 풀이 문제와 힌트를 보면 쉽게 풀 수 있는 문제라고 생각할 수 있다. 하지만 문자열의 길이가 최대 50이다. 이는 $31^49$를 구해주어야 한다. Swift에서는 Big Integer를 지원하지 않는데 어떻게 풀이할 수 있을까? 먼저 모듈러 연산에 대해 이해하고 있어야 한다. $(a + b) \mod M = ((a \mod M) + (b \mod M)) \mod M$ $(a - b) \m..
[BOJ] 백준 2751 수 정렬하기 2 (Swift) 문제 https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 풀이 Swift 내장함수인 sorted, sort 메서드를 통해 풀 수 있는 문제 Swift에서 출력 함수인 print가 String의 + 연산 보다 느리기 때문에 print 함수를 한 번만 사용하면 속도를 개선할 수 있음 소스코드 후기 아주 간단한 정렬 알고리즘
[BOJ] 백준 4153 직각삼각형 (Swift) 문제 https://www.acmicpc.net/problem/4153 4153번: 직각삼각형 입력은 여러개의 테스트케이스로 주어지며 마지막줄에는 0 0 0이 입력된다. 각 테스트케이스는 모두 30,000보다 작은 양의 정수로 주어지며, 각 입력은 변의 길이를 의미한다. www.acmicpc.net 풀이 직각삼각형의 공식은 $a^2 = b^2 + c^2$ 이다. a는 가장 큰 변의 길이를 의미함 먼저 입력으로 [0, 0, 0] 이 들어올 때 까지 받기 위해 while-let 문법을 사용하였음 sorted 메서드를 사용해 가장 큰 변의 길이를 구하고 공식과 맞는지 확인하는 방법으로 풀 수 있다. 소스코드 후기 직각삼각형 공식을 안다면 쉽게 풀 수 있는 문제
[BOJ] 백준 1259 팰린드롬수 (Swift) 문제 https://www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net 풀이 팰린드롬은 앞/뒤 로 읽어도 똑같은 단어를 의미한다. ex) 기러기, 토마토, 스위스, 역삼역, ... reversed() 메서드를 사용해서 동일하다면 팰린드롬 일 것이다. 또한, 0일 때까지 입력을 받으므로, while let 구문을 통해 입력을 받아주었다. 소스코드 후기 reversed() 메서드를 사용해서 쉽게 풀 수 있는 문제
[BOJ] 백준 2635 수 이어가기 (Swift) 문제 https://www.acmicpc.net/problem/2635 2635번: 수 이어가기 첫 번째 수가 주어진다. 이 수는 30,000 보다 같거나 작은 양의 정수이다. www.acmicpc.net 풀이 문제에 제시된 규칙대로 구현하면 되는 문제 첫 번째 수로 양의 정수가 주어진다. -> 이는 입력으로 주어지므로 입력을 받으면 됨 두 번째 수는 양의 정수 중에서 하나를 선택한다. -> 1번에서 받은 수 보다는 작거나 같아야함 (이유는 4번을 보면 알 수 있음) 세 번째부터 이후에 나오는 모든 수는 앞의 앞의 수에서 앞의 수를 빼서 만든다. 예를 들어, 세 번째 수는 첫 번째 수에서 두 번째 수를 뺀 것이고, 네 번째 수는 두 번째 수에서 세 번째 수를 뺀 것이다. -> 아하 음의 정수가 만들어지면..
[BOJ] 백준 27866 문자와 문자열 (Swift) 문제 https://www.acmicpc.net/problem/27866 27866번: 문자와 문자열 첫째 줄에 영어 소문자와 대문자로만 이루어진 단어 $S$가 주어진다. 단어의 길이는 최대 $1\,000$이다. 둘째 줄에 정수 $i$가 주어진다. ($1 \le i \le \left|S\right|$) www.acmicpc.net 풀이 입력받은 문자열의 i번째 글자를 출력하면 되는 문제 Swift에서는 index로 문자열에 접근할 수 없기 때문에, 문자열을 배열형태로 만들거나, String의 index 메서드를 활용하여 풀 수 있음 index는 1이 아닌 0부터 시작하므로 입력받은 i에서 1을 빼주어서 구해주어야 함 소스코드 후기 Swift에서 index로 문자열에 접근할 수 없어서 당황할 수 있지만, ..

반응형