Diana의 iOS 개발일기

[백준 swift] 문자열 - 1157번, 1152번, 5622번, 1316번 본문

알고리즘/백준

[백준 swift] 문자열 - 1157번, 1152번, 5622번, 1316번

Diana_iOS 2021. 4. 4. 23:07

1157번 - 단어 공부

import Foundation

let alpha = readLine()!.uppercased()//apple

alpha.forEach {
    print(String($0)) //A,P,P,L,E
}

해당 문제를 풀기 전 String에 forEach를 취할 시 위와 같은 결과가 나온다는 것을 알고 시작하자.

 

import Foundation

let alpha = readLine()!.uppercased()
var array = [String:Int]()

alpha.forEach {
    if array[String($0)] == nil{
        array[String($0)] = 1
    }else{
        array[String($0)]! += 1
    }
}

var result = [String]()

for key in array.keys {
    if array[key] == array.values.max(){
        result.append(key)
    }
}
print(result.count == 1 ? result[0] : "?")

1152번 - 단어의 개수

import Foundation

let alpha = readLine()!.components(separatedBy: " ")
var array = alpha.filter{($0).count > 0}

print(array.count)

5622번 - 다이얼

import Foundation

let written = readLine()!
let alpha = Array(written)

var array = alpha.reduce(0, {$0 + changeToNum(alpha: String($1))})

print(array)

func changeToNum (alpha: String) -> Int{
    switch alpha {
    case "A","B","C":
        return 3
    case "D","E","F":
        return 4
    case "G","H","I":
        return 5
    case "J","K","L":
        return 6
    case "M","N","O":
        return 7
    case "P","Q","R","S":
        return 8
    case "T","U","W":
        return 9
    default:
        return 10
    }
}

더 짧게 변경한 버전

import Foundation

let alpha = readLine() ?? ""
var result = 0

for char in alpha{
    switch char {
    case "A","B","C":
        result += 3
    case "D","E","F":
        result += 4
    case "G","H","I":
        result += 5
    case "J","K","L":
        result += 6
    case "M","N","O":
        result += 7
    case "P","Q","R","S":
        result += 8
    case "T","U","V":
        result += 9
    default:
        result += 10
    }
}

print(result)

1316번 - 그룹단어 체커

import Foundation

let num = Int(readLine()!)!
var dic = [String: Int]()
var add = 0

for _ in 1...num{
    var count = 1
    var recount = 1
    var char = Array(readLine()!)
    var clone = char
    
    clone.sort()
    clone.append("?")
    char.append("?")
    
    for i in 0...clone.count-2{
        if(clone[i] == clone [i+1]){
            count += 1
        }else{
            dic.updateValue(count, forKey: "\(clone[i])")
            count = 1
        }
    }

    for j in 0...char.count-2{
        if(char[j] == char[j+1]){
            recount += 1
        }else{
            if(dic[String(char[j])] == recount){
                if(j == char.count-2){
                    add += 1
                }
            }else{
                break
            }
            recount = 1
        }
    }
}

print(add)

너무 난잡하게 짠듯 해서 나중에 수정 예정입니다..