Swift 코딩테스트(37)
-
[Swift 코테] 백준 2609 최대공약수와 최소공배수
최대공약수와 최소공배수를 구하는 문제에서는 최대공약수만 안다면 최소공배수는 쉽게 구할 수 있다. 1. 최대 공약수를 부르트포스 처럼 모든 수로 나누는 방법을 생각했지만 유클리드 호제법이라는 알고리즘이 있었다. 유클리드 호제법 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 ..
2022.07.27 -
[Swift 코테] 백준 1004 어린왕자
방정식도 없이 경로를 구하라고? - 그렇다. 내 맘대로 하면 되는 문제지만 사실 경로가 필요 없는 문제다. - 주어진 입력을 좌표상에 그려보고 규칙을 찾을 수 있었다. - 1. 출발과 도착지점이 원의 안에 있는지 밖에 있는지가 이 문제를 해결하는 방법이다. 1 - 1. 출발과 도착지점이 원의 안에 있다면 원의 경계를 지나지 않고는 이동할 수 없기 때문에 카운트 +1 (= 보라색 점) 1 - 2. 출발과 도착지점이 원의 밖에 있다면 해당 원은 무시해도 된다. (= 초록색 해당 없음) - 2. 여기서 주의할 점은 주황색 원이다. 2 - 1. 출발과 도착지점 둘 다 주황색 원 안에 위치해 있다. 2 - 2. 이 경우는 주황색 원을 지날 필요가 없기 때문에 카운트하지 않고 무시한다. (= 주황색 해당 없음) -..
2022.07.19 -
[Swift 코테] 백준 2477 참외밭
큰 사각형 - 작은 사각형의 문제다. 문제점은 작은 사각형을 어떻게 구하는지 - 작은 사각형의 변은 큰 사각형의 변과 인접하지 않는다. - 큰 사각형의 가로 변(160)에 인접한 변은 세로변들(30, 50) 세로 변(50)에 인접한 변은 가로변들(160, 100) - 세로변들 차의 절대값(30 - 50)은 작은 사각형의 세로 변 길이(20) - 가로변들 차의 절대값(160, 100)은 작은 사각형의 가로 변 길이(60) - 작은 사각형변 길이(20) X 세로 사각형 변 길이(60) = 작은 사각형 넓이(1200) //코드 import Foundation let num = Int(readLine()!)! var LV = 0; var LH = 0 var VIdx = 0; var HIdx = 0 var inp..
2022.07.17 -
[Swift 코테 기초] 숫자와 문자 구별하기, uppercased()
"123"과 "abc"는 String입니다. 하지만 "123"을 123으로 인식하기를 원할 때 uppercased()를 통해 구분할 수 있습니다. uppercased(): 애플 문서에 따르면 uppercased() 함수는 string을 대문자로 복사해서 리턴하는 함수입니다. string을 uppercased()했을 때 값이 같으면 -> 숫자 다르면 -> 문자 로 구분할 수 있습니다. if str == str.uppercased() { print("숫자: str: \(str), str.uppercased(): \(str.uppercased())") }else{ print("문자: str: \(str), str.uppercased(): \(str.uppercased())") } //str = "abc" 문자..
2022.06.16 -
[Swift 코테 기초] Dictionary key값과 value값 reverse하기
swift에서 딕셔너리 key값과 value값을 교환하는 방법 var reverse = [String: String]() for j in original { reverse[j.value] = j.key }
2022.06.16 -
[Swift 알고리즘] 그래프의 표현
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 1. 에지 리스트(edge list) 에지를 중심으로 그래프를 표현 특정 노드와 관련되어 있는 에지를 탐색하기 쉽지 않기 때문에 노드 중심 알고리즘에서 잘 사용하지 않고 벨만 포드나 크루스칼 알고리즘에서 사용 [에지 리스트로 가중치 없는 그래프 표현하기] 가중치가 없는 그래프는 출발 노드와 도착 노드만 표현 배열의 행은 2개면 충분 노드는 여러 자료형을 사용할 수 있다. [에지 리스트로 가중치 있는 그래프 표현하기] 가중치가 있는 그래프는 행을 3개로 늘려 3번째 행에 가중치를 저장하면 된다. 2. 인접 행렬(adjacency matrix) 2차원 배열을 자료구조로 이용하여 그래프를 표현 노드 중심으로 그래프를 표현 ..
2022.06.15 -
[Swift 코테 기초] String 공백 없이 쪼개기, 내림차순정렬, print문 terminator
1. String을 공백 없이 쪼개는 방법 1-1 보다 더 간편한 방법을 찾았다. var string1 = Array(readLine()!) //["A", "B", "C", "D", "E", "F"] var string2 = "ABCDEF".map{String($0)} //["A", "B", "C", "D", "E", "F"] + Int형으로 변환 var string = "12345".map{Int(String($0))!} //[1, 2, 3, 4, 5] 1-1. 참고 1. 123456 -> [1,2,3,4,5,6] 으로 변환하는 방법 var num: String = readLine()! var arr = [Character]() for index in 0.. Int 형 변환: map을 사용해서 - ch..
2022.06.02 -
[Swift 코테] 백준 2108 통계학
산술평균, 중앙값, 범위를 구하는 것은 모두에게 문제가 없을 것이라고 생각한다. 그래서 최빈값에 대해서만 적어보겠다. 처음엔 계수 정렬을 사용해서 최빈값을 따로 계산하려고 했는데 -> 음수를 고려해서 배열의 인덱스를 다시 설정해야 하는 번거로움이 있었다. 그래서 서치 결과 딕서너리의 활용법을 통해 문제를 풀 수 있었다. 1. 숫자를 입력받을 때 dictionary의 key값에 숫자를 value에 += 1을 해주는 방식으로 dictionary를 세팅한다. let input = Int(readLine()!)! var arr = [Int](repeating: 0, count: input) var dict = [Int: Int]() for i in 0.. 1{ print(mode[1]) }else{ print(..
2022.06.02 -
[Swift 알고리즘] 정렬 알고리즘
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎 대부분 O(n²)과 O(nlogn) 사이의 시간 복잡도 정렬 알고리즘 정의 시간복잡도 버블(bubble) 데이터의 인접 요소기리 비교하고, swap 연산을 수행하며 정렬하는 방식 O(n²) 선택(selection) 대상에서 가장 크거나 작은 데이터를 찾아가 선택을 반복하면서 정렬하는 방식 O(n²) 삽입(insertion) 대상을 선택해 정렬된 영역에서 선택 데이터의 적절한 위치를 찾아 삽입하면서 정렬하는 방식 O(n²) 퀵(quick) pivot 값을 선정해 해당 값을 기준으로 정렬하는 방식 O(nlogn) 병합(merge) 이미 정렬된 부분 집합들을 효율적으로 병합해 전체를 정렬하는 방식 O(nlogn) 힙(hea..
2022.05.23 -
[Swift 코테] 백준 10872 팩토리얼
팩토리얼 함수는 모든 양의 정수와 0에 대해 정의됩니다. 0! 의 값은 무엇이어야 할까요 ? 이는 1보다 크거나 같고 0보다 작거나 같은 모든 정수들의 곱입니다. 그렇지만 그런 정수는 존재하지 않습니다. 그러므로 0! 은 곱셈의 항등원인 1과 같다고 정의합니다. 에 주의해서 문제를 풀어야 합니다. 팩토리얼의 끝이 1이라고 생각해서 문제를 풀었더니 메모리 초과로 문제를 풀지 못했습니다. 0과 1의 메모리에서 어떤 차이가 있는지는 더 찾아봐야 겠습니다. //코드 import Foundation let input = Int(readLine()!)! func factorial(num: Int) -> Int{ if num == 0{ return 1 }else{ return num * factorial(num: n..
2022.04.26 -
[Swift 코테] 백준 1002 터렛
중학교 수학을 코드로 푸는 느낌이다. //코드 import Foundation var time = Int(readLine()!)! for i in 0.. r1 + r2{ print("0") }else if (r1 > r2 && d + r2 r1 && d + r1 < r2){ print("0") } else if d == r1 + r2 || (d + r1 == r2) || (d + r2 == r1){ print("1") }else{ print("2") } }
2022.04.25 -
[Swift 코테] 백준 3053 택시 기하학
출력 형식의 문제인가 싶었는데 원주율의 문제였습니다. 원주율 -> 3.141592653 로 표현하지 말고 원주율 -> Double.pi 사용하기 //코드 import Foundation let r = Float64(readLine()!)! var u = Double.pi * r * r var t = r * r * 2 print(u) print(t)
2022.04.25