본문 바로가기

분류 전체보기

(346)
[BOJ] 백준 18110 solved.ac (Swift) 문제 https://www.acmicpc.net/problem/18110 18110번: solved.ac 5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다. www.acmicpc.net 풀이 문제만 잘 따라가면 쉽게 풀 수 있는 문제 먼저 제외할 상위 15%, 하위 15%의 명 수를 구해주어야 한다. Swift는 자료형이 까다로운 언어이므로 15%를 구하고 반올림을 하기위해서 형변환이 필요했다. 15%가 몇명인지 구한 후, removeFisrt(_ k:), removeLast(_ k:) 메서드를 사용하여 삭제시켜주었다. 그 이후, 평균을 구해주어..
[BOJ] 백준 10845 큐 (Swift) 문제 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 풀이 큐를 구현하는 문제 Swift에서는 Queue를 지원하지 않으므로 직접 구현해야 한다. 큐 자료구조에 대해 모른다면 다음 포스팅을 확인하고 와도 좋을 것 같습니다. https://dev-mandos.tistory.com/190 [자료구조] Queue에 대해 알아보고 구현해보기 (Swift) Queue란? Queue 자료구조는 선입선출(First In First Out)F..
[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() 메서드를 사용해서 쉽게 풀 수 있는 문제