Algorithm Problem Solving/Programmers

[프로그래머스] 이상한 문자 만들기, 자연수 내림차순으로 배치하기, 정수 제곱근 판별 with Swift

코코자장자장 2021. 12. 7. 19:32

안녕하세요! 오늘은 이상한 문자 만들기, 자연수 내림차순으로 배치하기, 정수 제곱근 판별 문제를 풀어보았습니다.

 

 

1. 이상한 문자 만들기

이상한 문자만들기는 한 단어의 홀수는 대문자 짝수는 소문자로 만들어서 푸는 문제입니다!

 

한 문장의 홀수와 짝수로 빠르게 문제를 풀어버리고 틀려서 고생했습니다. ㅠㅠ 

 

문제를 푸실 때 문제를 코딩하는 시간과 비례하게 문제를 읽고 생각해보는 시간을 다들 가져보시는것도 좋습니다!

 

예전부터 문제만 보면 #include <iostream> 부터 넣어버리는 습관을 없애야겠다고 생각했습니다!

 

문제를 보면 문자를 아스키코드로 바꾸고 그 글자가 소문자인지 대문자인지 판별 후 홀수번째에 대문자로 넣어주고 짝수번째에 소문자를 넣어주면 풀 수 있는 간단한 문제입니다!

func solution(_ s:String) -> String {
    var result = ""
    var count = 0
    for index in s.utf8 {
        if index != 32 {
            if count%2 == 1{
                if index >= 97{
                    result += String(UnicodeScalar(index))
                }
                else {
                    result += String(UnicodeScalar(index+32))
                }
            }
            else {
                if index >= 97{
                    result += String(UnicodeScalar(index - 32))
                }
                else {
                    result += String(UnicodeScalar(index))
                }
            }
        }
        else {
            count = 1
            result += String(UnicodeScalar(index))
        }
        count += 1
        
    }
    return result
}

 

 

2. 자연수 내림차순으로 배치하기

 

자연수 내림차순으로 배치하기 문제는 Int64를 받아 내림차순으로 정렬해주면 되는 문제입니다!

 

Int64를 받아 한자리수씩 배열에 넣습니다!

 

배열에 넣는 방법은 %10값을 넣고 다음번에는 /10을 해주고 반복하면 한자리씩 받아올 수 있습니다!

 

이후 내림차순으로 정렬하는 방법은 sorted by에 후행 클로져를 이용하여 내림차순으로 쉽게 정렬할 수 있습니다!

 

그리고 다시 배열의 값을 하나씩 합쳐주는 과정을 통해 문제를 해결할 수 있습니다.

 

func solution(_ n:Int64) -> Int64 {
    
    var nArray:[Int64] = [Int64]()
    var N = n
    var answer:Int64 = 0
    
    while N > 0 {
        nArray.append(N%10)
        N = N/10
    }
    
    nArray = nArray.sorted(by :{ (int1:Int64, int2:Int64) -> Bool in
        return int1 > int2
    })
    
    for i in 0..<nArray.count{
        answer = answer * 10
        answer += nArray[i]
    }
    
    return answer
}

 

 

3. 정수 제곱근 판별

 

정수 제곱근 판별은 Foundation의 sqrt를 이용하면 쉽게 풀 수 있습니다!

 

sqrt를 이용하면 됩니다!

 

sqrt해서 나온 수가 정수일 경우 제곱근이기 때문에 정수인지 아닌지 확인해줍니다.

 

그리고 정수라면 1 더해서 제곱한 결과를 return아니면 -1을  return하면 문제를 해결하실 수 있습니다.

 

import Foundation

func solution(_ n:Int64) -> Int64 {
    var result: Int64 = 0
    
    let number = sqrt(Double(n))
    if number == Double(Int64(number)) {
        result = Int64((number + 1) * (number + 1))
    } else {
        result = -1
    }
    
    return result
}