Algorithm

Algorithm/프로그래머스

[프로그래머스 스위프트] 3진법 뒤집기

아이디어 주어지는 n을 3진법으로 만들고 이를 뒤집은 후 다시 10진법으로 변환시키는 로직이다. radix를 사용하면 쉽게 구현이 가능하다. 먼저 n을 3진법 String으로 만들고 이를 reversed하여 순서를 바꾸고 다시 Int로 바꾼다. 여기서 주목해야 할것은 Int형의 n을 10진법이 아닌 다른 진법 (2진법, 3진법 등)으로 바꿀 때는 String으로 형변환을 하면서 하는데 그대로 역으로 다시 10진법으로 형변환을 하고 할 경우 기존 변경된 진법을 입력하고 Int(n, radix: 3)!으로 해야한다는 것이다. Int로 형변환 할때 옵셔널로 들어가니까 강제 언래핑 하는것은 물론이다. 해답 import Foundation func solution(_ n:Int) -> Int { return In..

Algorithm/프로그래머스

[프로그래머스 스위프트] 소수찾기

아이디어 에라토스테네스를 이용하여 풀었다. 특이한 점은 array를 1로 초기화하는 부분에서 처음에는 i의 값을 대입하고 다시 for문을 통해서 cnt를 체크해서 리턴하는 방법을 썼었는데 효율성에서 탈락했다. 때문에, 소수는 1로 체크하고 reduce를 이용하여 모든 요소를 합쳐버리는 방식으로 소수의 개수를 추출했더니 통과했다. 해답 import Foundation func solution(_ n:Int) -> Int { var array = Array(repeating: 0, count: n + 1) for i in 2 ... n { array[i] = 1 } for i in 2 ... n { if array[i] == 0 { continue } for j in stride(from: i + i, th..

Algorithm/백준

[백준 스위프트] 6219번 소수의 자격

아이디어 에라토스테네스의 체를 이용하여 num(4000000)까지 소수를 생성하고 A와 B 사이에서만 소수를 찾은 다음 D와 소수를 String으로 만들어 contains 함수를 이용하여 요소로 가지고 있는지를 탐색하였다. 이때, A와 B에서 에라토스테네스의 체를 생성하려고 할 수 있는데 에라토스테네스의 체는 특정 구간에서부터가 아니라 2부터 순서대로 해야 하는 방식이라 그런 방식은 통하지 않는다. 해답 import Foundation let input = readLine()!.components(separatedBy: " ").map { Int(String($0))! } let A = input[0] let B = input[1] let D = input[2] var cnt = 0 var num = 4..

Algorithm/백준

[백준 스위프트] 1747번 소수&팰린드롬

아이디어 바로 이전에 K번째 소수를 풀고 푼 문제이기 때문에 자연스럽게 에라토스테네스의 체를 이용하였다. N보다 넉넉하게 큰 수를 설정하고 그만큼 소수를 찾아 놓은 후, N보다 큰 소수를 찾아 String으로 만든 후 팰린드롬 여부를 판단하였다. 문자열로 만들면 뒤로 뒤집어서 확인해도 팰린드롬인지 확인이 가능하므로 이를 이용하여 풀었다. 에라토스테네스의 체의 경우 위의 링크를 참조하시길.. 해답 let N = Int(readLine()!)! var num = 3_000_000 var numArray = Array(repeating: 0, count: num + 1) var cnt = 0 func isPalindrome (_ num: Int ) -> Bool { let str = String(num) re..

Algorithm/백준

[백준 스위프트] 15965번 K번째 소수

아이디어 서브 테스트가 존재하는 문제이며 이를 통해 효율성과 관련 있는 문제라는 것을 알 수 있다. 이제까지 소수를 구하던 방법으로 이중 for문을 통하여 반복해가며 제곱근에 닿을 때까지 연산을 거듭하는 방식으로 풀려고 했으나 실패했다. 다음으로 찾아낸 방식은 에라토스테네스의 체이다. 넉넉하게 천만까지 소수를 판별하도록 하였다. 에라토스테네스의 체에 대해 짧게 서술하면 쉽게 구현이 가능하면서도 충분히 빠른 방법이다. 1. 원하는 숫자까지 배열로 세팅을 완료하고 애매한 숫자인 1을 제거한다. (여기서 제거라는 것은 배열에서는 0이나 false로 값을 변경하면 된다) 2. 다음으로 2와 3의 배수를 제거하되 자기 자신은 그대로 둔다. 3. 이와 같이 5의 배수, 7의 배수, 그 다음도 지워나간다. 이미 지워..

Algorithm/프로그래머스

[프로그래머스 스위프트] 문자열 내 p와 y의 개수

문제 요약 1. p, y, P, Y이 s에 포함되어 있지 않으면 true를 리턴 2. 다음으로 p와 y의 갯수를 센다. 서로 동일하면 true와 아니면 false를 리턴한다. 해답 import Foundation func solution(_ s:String) -> Bool { var pCnt = 0 var yCnt = 0 if !s.contains("p") && !s.contains("y") && !s.contains("P") && !s.contains("Y") { return true } for i in s { if i == "p" || i == "P" { pCnt += 1 } else if i == "Y" || i == "y" { yCnt += 1 } } if pCnt == yCnt { return ..

Algorithm/프로그래머스

[프로그래머스 스위프트] 문자열 내림차순으로 배치하기

아이디어 String으로 배열을 만든후 오름차순으로 정렬한다. 해답 func solution(_ s:String) -> String { return String(Array(s).sorted(by: >)) }

Algorithm/프로그래머스

[프로그래머스 스위프트] 문자열 다루기 기본

문제 요약 문자열의 길이가 4인지 6인지를 판단한다. 문자열에 allSatisfy와 isNumber를 이용하여 검사한다. 이때 결과를 판단하여 리턴한다. 해답 func solution(_ s:String) -> Bool { if s.count == 4 || s.count == 6 { return s.allSatisfy({ $0.isNumber }) } else { return false } }

Algorithm/프로그래머스

[프로그래머스 스위프트] 서울에서 김서방 찾기

아이디어 Kim의 유일성이 확보되어 있으므로 배열 안에서 Kim의 위치를 찾기만 하면 된다. 해답 func solution(_ seoul:[String]) -> String { return "김서방은 \(seoul.firstIndex(of: "Kim")!)에 있다" }

Algorithm/프로그래머스

[프로그래머스 스위프트] 수박수박수박수박수박수?

아이디어 홀짝을 판단하고 그에 맞춰서 수와 박을 넣는다. 유용한 문법 요소는 joined이다. 해답 func solution(_ n:Int) -> String { var result: [String] = [] for i in 1 ... n { if i % 2 == 0 { result.append("박") } else { result.append("수") } } return result.joined(separator: "") }

devKen
'Algorithm' 카테고리의 글 목록 (2 Page)