[프로그래머스 | Lv.1] 둘만의 암호

2024. 4. 16. 14:21·Data structure & Algorithm/프로그래머스

 

문제 설명

 

두 문자열 s와 skip, 그리고 자연수 index가 주어질 때,

다음 규칙에 따라 문자열을 만들려 합니다.

암호의 규칙은 다음과 같습니다.

 

1)

문자열 s의 각 알파벳을 index만큼 뒤의 알파벳으로 바꿔줍니다.

 

2)

index만큼의 뒤의 알파벳이 z를 넘어갈 경우 다시 a로 돌아갑니다.

 

3)

skip에 있는 알파벳은 제외하고 건너뜁니다.

 

예를 들어 s = "aukks", skip = "wbqd", index = 5일 때,

a에서 5만큼 뒤에 있는 알파벳은 f지만

[b, c, d, e, f]에서 'b'와 'd'는 skip에 포함되므로 세지 않습니다.

따라서 'b', 'd'를 제외하고 'a'에서 5만큼 뒤에 있는 알파벳은

[c, e, f, g, h] 순서에 의해 'h'가 됩니다.

나머지 "ukks" 또한 위 규칙대로 바꾸면 "appy"가 되며 결과는 "happy"가 됩니다.

 

두 문자열 s와 skip, 그리고 자연수 index가 매개변수로 주어질 때

위 규칙대로 s를 변환한 결과를 return하도록 solution 함수를 완성해주세요.

 

 

제한 사항

 

5 ≤ s의 길이 ≤ 50

1 ≤ skip의 길이 ≤ 10

s와 skip은 알파벳 소문자로만 이루어져 있습니다.

skip에 포함되는 알파벳은 s에 포함되지 않습니다.

1 ≤ index ≤ 20

 

 

입출력 예

 

s skip index result
"aukks" "wbqd" 5 "happy"

 

입출력 예 설명

 

입출력 예 #1
본문 내용과 일치합니다.

 

 

 

나의 풀이

func solution(_ s:String, _ skip:String, _ index:Int) -> String {
    var answer = ""
    var skipToAsciis = stringToAsciis(skip)
    
    for i in stringToAsciis(s) {
        var ascii = i
        var count = 0
        
        while count < index {
            ascii += (ascii < 122) ? 1 : -25
            count += (skipToAsciis.contains(ascii)) ? 0 : 1
        }
        
        answer += asciiToString(ascii)
    }
    
    return answer
}

func stringToAsciis(_ s: String) -> [Int] {
    return s.map { Int(UnicodeScalar(String($0))!.value) }
}

func asciiToString(_ i: Int) -> String {
    return String(UnicodeScalar(i)!)
}

 

 

 

다른 사람의 풀이

 

enumerated를 활용하여 풀어낸 것을 보았습니다 !

 

enumerated에 대해 잘 모르기도 하고,

찾아보니 문제를 풀 때 뿐만 아니라

개발을 할 때도 많은 도움이 될 거 같아서

정리 해보려고 합니다 ~

 

(다른 사람의 풀이 <- 모르는 문법을 정리하는 목차로 탈바꿈한 느낌이 듭니다.)

 

 

 

(n, x) 쌍의 sequence를 반환합니다.

 

n -> 0부터 시작하는 인덱스

x -> sequence의 요소

 

반환된 값에 .element와 .offset으로

각각의 요소와 인덱스에 접근할 수 있습니다 !

 

 

sequence란?

 

sequence는 한 번에 하나씩 가져올 수 있는 값들의 목록입니다.

 

대표적으로 많이 사용하는

Array, Set, Dictionary도 이에 해당합니다.

 

위의 세 개는 Collection 프로토콜을 채택하고 있고,

Collection 프로토콜은 Sequence 프로토콜을 채택하고 있습니다.

 

 

그렇기 때문에 우리가 위의 것들을

반복문이나 고차함수 등에 활용할 수 있는 것이죠.

 

 

 

'Data structure & Algorithm > 프로그래머스' 카테고리의 다른 글

[프로그래머스 | Lv.1] 햄버거 만들기  (1) 2024.04.30
[프로그래머스 | Lv.1] 대충 만든 자판  (7) 2024.04.17
[프로그래머스 | Lv.1] 문자열 나누기  (3) 2024.04.15
[프로그래머스 | Lv.1] 숫자 짝꿍  (6) 2024.04.12
[프로그래머스 | Lv.1] 체육복  (3) 2024.04.11
'Data structure & Algorithm/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 | Lv.1] 햄버거 만들기
  • [프로그래머스 | Lv.1] 대충 만든 자판
  • [프로그래머스 | Lv.1] 문자열 나누기
  • [프로그래머스 | Lv.1] 숫자 짝꿍
ohhoooo
ohhoooo
  • ohhoooo
    ohhoooo
    ohhoooo
  • 전체
    오늘
    어제
    • 전체 글 (84)
      • iOS (1)
      • Swift (1)
      • Data structure & Algorithm (67)
        • 프로그래머스 (67)
      • 기타 (15)
        • TIL (2)
        • Android (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
ohhoooo
[프로그래머스 | Lv.1] 둘만의 암호
상단으로

티스토리툴바