목록백준 (11)
MUKER_DEV with iOS
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..
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이 아니라면 하루를 ..
2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 나의 풀이 let a = Int(readLine()!)! var count = 0 var num = 1 while true { count += 1 if num >= a { break } else { num += count * 6 } } print(count) 69100kb 8ms 171b
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'배열에 제일..
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..
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
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..
3052번: 나머지 각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다. www.acmicpc.net 내가 푼 풀이 var arr: [Int] = [] var a = 10 for i in 0...9 { arr.append(Int(readLine()!)!) arr[i] = arr[i] % 42 } for i in 0...8 { for j in i+1...9 { if arr[i] == arr[j] { a = a - 1 break // 중첩되는 숫자가 나오면 더이상 반복하지 않고 break로 j를 돌리는 for문을 빠져나온다. } } } print(a) 69100kb, 8ms, 247b 개선한 풀이 - 길이 감소 var arr = [In..
2562번: 최댓값 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어 www.acmicpc.net 내가 푼 풀이 - 배열.firstIndex() 함수로 원하는 값의 순서를 앞에서부터 몇번째인지 알 수 있다. var arr: [Int] = [] for _ in 1...9 { arr.append(Int(readLine()!)!) } let max = arr.max()! print(max) print(arr.firstIndex(of: max)! + 1) 69100kb, 8ms, 141b
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