목록코딩테스트 (17)
MUKER_DEV with iOS
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TAq1L/btrMktJCG3w/aKGM4TyxbSzMLWmxOLsEP0/img.png)
10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 나의 풀이 let t = Int(readLine()!)! for _ in 1...t { let input = readLine()!.split(separator: " ").map { Int($0)! } let h = input[0] let n = input[2] let H = (n - 1) % h + 1 // 사람 수(n)에 -1을하고 층(h)을 나눈 나머지에 +1을 하면 0층이 나오는걸 막을 수 있다. let tempW = (n - 1) / h + 1..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DYYET/btrMmgPFu4Z/94spOFkjvkqisGEPNfygE0/img.png)
2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 나의 풀이 let r = readLine()!.split(separator: " ").map { Int($0)! } let tm = r[2] - r[1] // 총 올라가야하는 거리(정상에서는 미끄러지지 않기 때문에 한번 미끄러지는 거리를 빼줌) let mm = r[0] - r[1] // 하루마다 올라가는 거리 var result = tm / mm // 총 올라가는 거리 / 하루마다 올라가는 거리 let ss = tm % mm // 나누고 떨어지는 나머지 값 if ss != 0 { // 나머지 값이 0이 아니라면 하루를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bMDQ17/btrLK5hgOkD/ZlCki38p79m65J9FEJoWzk/img.png)
1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 나의 풀이 // 입력값 대문자로 변환 let input = readLine()!.uppercased() var dic = [String: Int]() var temp = [String]() for i in input { // 입력값을 딕셔너리 키값에 넣고 입력값이 중복되면 벨류가 1씩 늘어남 if dic[String(i)] == nil { dic[String(i)] = 1 } else { dic[String(i)]! += 1 } } for i in dic.keys { // 'temp'배열에 제일..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bd2D9W/btrLJoa563X/6cAaKeecVSBmVOA9xJBXz0/img.png)
2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 나의 풀이 let input = Int(readLine()!)! // 입력값 만큼 반복해서 readLine생성 for _ in 1...input { // 반복해서 나올 입력값을 temp 배열에 따로 넣어줌 let temp = readLine()!.split(separator: " ") // temp[1] 에 있는 문자를 하나씩 꺼냄 for i in temp[1] { // 꺼낸 문자를 temp[0]에 있는 숫자만큼 출력 for _ in 1...Int(te..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bN2Nwz/btrLzDSbWDc/S3KP0WaNIVEGYtvOoNlMe0/img.png)
11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. www.acmicpc.net 나의 풀이 let input = Int(readLine()!)! let input2 = readLine()! var result = 0 for i in input2 { result += Int(String(i))! } print(result) 69100kb 8ms 134b 개선한 풀이 - 코드길이 감소 Int(readLine()!)! print(readLine()!.map{ Int(String($0))! }.reduce(0) { $0 + $1 }) 69100kb 8ms 82b
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cOGCzF/btrLqdNBI86/iCI5O0gO4tuZ0Mty7qVlRk/img.png)
4344번: 평균은 넘겠지 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. www.acmicpc.net 나의 풀이 코드 import Foundation let input = Int(readLine()!)! for _ in 1...input { var input2 = readLine()!.split(separator: " ").map { Int($0)! } var over = 0 var avg = 0 let count = input2[0] input2.remove(at: 0) for i in input2 { avg += i } avg = avg / count for i in input2 { if i > avg { over += 1 } } pr..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JQfJ7/btrKOI2FRkU/4IA8JE88kYb7fIkaWbT5Mk/img.png)
10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 내가 푼 풀이 - .min()과, .max()로 배열의 최솟값, 최대값을 구할 수 있다. let input = Int(readLine()!)! let arr = readLine()!.split(separator: " ").map { Int($0)! } print(arr.min()!, arr.max()!) 133696kb, 404ms, 120b
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JnenJ/btrKVw0gRQZ/zVcxJYEod1HQDIzUd7GP51/img.png)
1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net 내가 푼 풀이 - 숫자에서 자릿수를 구하고 싶을때는 / 와 % 를 적절하게 사용할 수 있다. let input = Int(readLine()!)! var temp = input var num = 0 repeat { let input1 = temp / 10 let input2 = temp % 10 temp = (input2 * 10) + ((input1 + input2) % 10) num += 1 } while input != temp print(n..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Ede9I/btrUeJQyoQc/NsBg57BiSyudokzbckvaqK/img.png)
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이를 직관적으로 이해할 수 있도록 고차함수를 사용하지 않은 풀이와 고차함수를 사용한 풀이로 나누어 공부하고 있습니다. 고차함수를 사용하지 않은 풀이 import Foundation func solution(_ s:String) -> Bool { var pCount = 0 var yCount = 0 for i in s.lowercased() { if i == "p" { pCount += 1 } if i == "y" { yCount += 1 } } if pCount == yCount { return true..
제 문제 풀이는 최선의 풀이가 아닐 수 있습니다. 문제를 푸는 방법은 다양합니다! 문제설명 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 조건 str은 길이 1 이상인 문자열입니다. 입출력 예 s return "Zbcdefg" "gfedcbZ" 문제 분석 1. 문자열을 내림, 오름 차순으로 정렬할 수 있다. Solution.swift func solution(_ s:String) -> String { // sorted는 문자열, 배열을 정렬해주는 고차함수이다. // 오름차순으로 정렬하고 싶으면 $0 < $1로 뒤로 갈수록 커지게 하면 된다...