Algorithm/프로그래머스

[프로그래머스 : 코딩테스트 연습 - Swift] 문자열안에 문자열

버스트 캐넌 2023. 10. 25. 03:10

글 작성에 앞서 본 블로그의 모든 게시글은 블로그 주인의 개발 일지(일기) 형태의 게시글입니다.

정보를 나누는 방식보단, 제가 했던 방식을 공유하는 식의 글이라 읽어도 제대로 이해를 못 하실 수 있거나 더 좋은 다른 방법이 존재할 수 있습니다.

이 점 양해해 주시며 본 블로그의 게시글을 읽어주시면 감사하겠습니다.

programmers

안녕하세요 버스트캐넌입니다.

 

주말 동안 평균을 올리려 했으나... 컨디션 조절 실패로 몸살에 걸리는 바람에...ㅠ

 

오늘은 문자열안에 문자열 문제입니다.

 

문제


문제 설명

  • 문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return 하도록 solution 함수를 완성해 주세요.

제한 사항

  • 1 ≤ str1의 길이 ≤ 100
  • 1 ≤ str2의 길이 ≤ 100
  • 문자열은 알파벳 대문자, 소문자, 숫자로 구성되어 있습니다.

입출력 예

  • str1 = "ab6CDE443fgh22iJKlmn1o", str2 = "6CD", return = 1
  • "ab6CDE443fgh22iJKlmn1o" str1에 str2가 존재하므로 1을 return 합니다.

 

풀이


import Foundation

func solution(_ str1:String, _ str2:String) -> Int {
    if str1.contains(str2) {
        return 1
    } else { return 2}
}

기본 개념


contains(_:)

func contains(Element) -> Bool

Swift에 존재하는 contains라는 메서드입니다.

 

사용 방법은 간단합니다.

str1.contains(str2)

간단한 예제 코드를 들고 왔습니다.

 

str1이라는 String 변수 안에, str2라는 String 변수가 있는지 확인하고, 있으면 true, 없으면 false를 반환합니다.

 

str1의 어느 위치에 있던 상관하지 않지만, 대소문자는 구분합니다.

 

코드 풀이


(LV0은 제한사항을 무시해도 된다고 하여, 저도 무시하겠습니다.)

 

if str1.contains(str2) {
        return 1
    } else { return 2}

오늘의 코드는 간단합니다.

 

contains라는 오늘의 문제에 딱 맞는 메서드를 찾아, 바로 적용시켜 주었습니다.

 

str1이라는 String변수에 str2가 있는지 보고, 만약 있다면 1을 return 해주고 없다면 2를 return 해주도록 코드를 작성했습니다.

 

간단한 if 구문, if와 else만 있다는 점에서, 바로 삼항연산자가 떠올랐는데

 

return 부분에서 사용하는 법을 몰라서 그냥 if로 했습니다.

 

삼항연산자로 간단히 줄이는 건 다른 사람 코드 탐구에 있습니다.

 

다른 사람 코드 탐구


오늘은 사실 코드가 간단해서 두근 되진 않습니다 ㅎ

 

삼항연산자 말고 다른, 엄청나게 효율적인 다른 코드도 안보이더라고요.

 

삼항연산자만 한번 볼까요?

 

import Foundation

func solution(_ str1:String, _ str2:String) -> Int { 
	return str1.contains(str2) ? 1 : 2 
}

삼항연산자로는 이렇게 하는 거였네요.

 

저도 삼항연산자로 풀어보려 했는데,

 

import Foundation

func solution(_ str1:String, _ str2:String) -> Int { 
	str1.contains(str2) ? return 1 : return 2 
}

이런 식으로 return을 뒤로 줘버려서 계속 문법 오류가 났었는데 return을 앞에 주고 뒤에서는 그냥 숫자만 적어두면 되겠네요.

 

import Foundation

func solution(_ str1:String, _ str2:String) -> Int { str1.contains(str2) ? 1 : 2 }

그리고 이런 식으로, return 조차 쓰지 않고 한 줄로 코드를 적은분 들도 계셨는데, 반환코드가 한 줄일 경우 return을 생략해도 자동으로 return이 됩니다.

 

반환 코드가 간단할 경우, return을 생략하여 더 짧은 코드를 만들 수 있겠네요.

 

이상 문자열 안에 문자열 문제를 풀어보았습니다.

 

평균을 빨리 채우도록 노력해야겠네요.

 

포스팅 읽어주셔서 감사합니다.

 

좋은 하루 보내세요~

 

궁금한 점이나 지적해야 할 부분이 있으시면 댓글 남겨주세요. 블로그 주인의 상황에 따라 답변이 없을 수 있으나, 최대한 피드백해 드리겠습니다.