반응형
250x250
11-24 15:01
Today
Total
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Notice
Recent Posts
Recent Comments
Link
Archives
관리 메뉴

Bill Kim's Life...

[Swift] 프로그래머스 연습 문제(Level 1) : 문자열 내 p와 y의 개수 본문

CS(컴퓨터 과학)/Coding Test

[Swift] 프로그래머스 연습 문제(Level 1) : 문자열 내 p와 y의 개수

billnjoyce 2021. 1. 19. 17:52
728x90
반응형
실제 코딩테스트의 문제를 통하여 알고리즘 분석과 코딩 능력을 향상시킵니다.

 

 

#. 구독 대상

  • 기본 알고리즘을 코딩 테스트 문제를 통하여 학습하고 싶으신 분
  • 취업 및 이직을 준비하고 계신 개발자
  • Swift를 통하여 코딩 테스트 문제를 살펴보고 이해를 하고 싶으신 분
  • 코딩 테스트에 대한 거부감을 없애기 위하여 기초부터 하나씩 공부해보고 싶으신 분
  • 기타 알고리즘과 문제 해결 능력에 대해서 관심이 있는 모든 개발자분
참고 사항

본 코딩 테스트 문제에 대한 설명 및 해결 방안은 최적의 답이 아닐 수 있습니다.

본 강의에서 지향하는 목표는 바로 특정 문제에 대한 최적의 해결 방법을 찾기보다는 특정한 문제에 대해서 충분히 이해할 수 있고 다양한 방법을 통하여 해결하는 방법을 찾고 향상시키는데 그 목적이 있습니다.

좀 더 좋은 알고리즘 및 코드가 있으시다면 언제든지 본 게시물의 댓글을 통해서 제시해주시면 감사하겠습니다.

 

 

 


 

 

 

코딩 테스트 문제

 

먼저 오늘 살펴볼 문제에 대해서 먼저 살펴보겠습니다.

 

programmers.co.kr/learn/courses/30/lessons/12916?language=swift

 

코딩테스트 연습 - 문자열 내 p와 y의 개수

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를

programmers.co.kr

 

 

 


 

 

 

문제 설명

 

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다.

 

 

 

 


 

 

 

제한 조건

 

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

 

 

 

 

 

 

 


 

 

 

 

입출력 예

s answer
pPoooyY true
Pyy false

입출력 예 설명

 

입출력 예 1
'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다.

 

입출력 예 2
'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 return 합니다.

 

 

 

 


 

 

문제 분석

 

오늘 문제는 주어진 문자열에서 p 문자와 y 문자의 갯수를 비교하여 같으며 true, 그렇지 않으면 false를 리턴하면 되는 비교적 간단한 법칙을 요구하는 문제입니다. 우선 하나씩 본 문제의 답을 위한 알고리즘을 고민해보도록 하겠습니다.

 

두 문자를 비교할 때 특별한 조건으로는 대소문자를 구분하지 않는다는 점이 있습니다.

 

 

 

 


 

 

 

알고리즘

 

위의 내용을 기반으로 하여 본 문제를 해결하기 위한 알고리즘을 살펴보면 아래와 같습니다.

 

  • 대소문자를 구분하지 않으므로 우선 입력 문자를 소문자로 변경합니다.
  • 입력된 문자열에서 p와 y의 갯수를 체크합니다.(filter를 사용하여 해당 문자의 갯수를 체크)
  • 두 문자의 갯수가 같다면 true, 다르다면 false를 반환하도록 합니다.

 

 

 

 


 

 

 

코드 설명

 

그렇다면 위의 알고리즘에 대해서 하나씩 살펴보면서 코드로 작성을 해보도록 하겠습니다.

 

 

  • 대소문자를 구분하지 않으므로 우선 입력 문자를 소문자로 변경합니다.

 

 

 

var answer = s.lowercased()

 

 

  • 입력된 문자열에서 p와 y의 갯수를 체크합니다.(filter를 사용하여 해당 문자의 갯수를 체크)
  • 두 문자의 갯수가 같다면 true, 다르다면 false를 반환하도록 합니다.

 

 

 

// p의 문자 출현 갯수와 y 문자 출현 갯수를 서로 비교
// 같으면 true, 다르면 false를 리턴
return ((answer.filter{$0 == "p"}.count) == 
       (answer.filter{$0 == "y"}.count)) ? true : false

 

 

 

위의 코드들을 모두 조합하여 최종 코드를 완성하면 아래와 같습니다.

 

 

최종 코드

import Foundation

func solution(_ s:String) -> Bool
{
    var answer = s.lowercased()
    
    // p의 문자 출현 갯수와 y 문자 출현 갯수를 서로 비교
    // 같으면 true, 다르면 false를 리턴
    return ((answer.filter{$0 == "p"}.count) == 
            (answer.filter{$0 == "y"}.count)) ? true : false
}

 

 

 

 


 

 

 

오늘은 문자열 비교를 Swift 에 내장된 고차 함수인 filter를 사용하여 간단하게 문자열의 갯수를 비교하는 문제에 대해서 살펴보았습니다.

 

그럼 남은 하루도 즐거운 시간되시길 바랍니다.

 

 

 

감사합니다.

728x90
반응형
Comments