Programmers 첫 번째 문제 풀이, 부분 문자열 contain을 알아보도록 할게요. contains() 함수는 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수이며, 대 소문자를 구분합니다. 아래의 문제들은 프로그래머스에 출처에 있습니다. 문제 소지가 발생할 시 프로그래머스와 관련된 내용을 모두 삭제할 것을 약속드립니다.
프로그래머스 보러 가기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
서론
contains() 기본 사용법
contains는 ture 값과 false 값으로 리턴해주는데, str이라는 변수에 문자열 "abcd"를 선언하고, str안에, "a"라는 글자가 있니?라고 물어보고 출력하게 되면 결괏값 true라고 반환해 준다.
public class preEX1116 {
public static void main(String[] args) {
String str = "abcd";
System.out.println(str.contains("a"));
}
}
그런데 만약 다시 System.out.println()을 통해서, 대문자 A가 있니?라고 다시 물어보게 되면, false의 값을 반환한다.
System.out.println(str.contains("A"));
그 이유는 아까 언급한 바와 같이 contains은 대소문자 구분을 하지 않기 때문이다. 그 외에도, 문자열에 특정 문자를 포함한 문자열을 찾는 함수는 indexOf, matches 등이 있는데, 이 세 가지 함수는 조금씩 차이가 있다.
본론
1. 프로그래머스 부분 문자열 문제
어떤 문자열 A가 다른 문자열 B안에 속하면 A를 B의 부분 문자열이라고 합니다.
예를 들어 문자열 "abc"는 문자열 "aabcc"의 부분 문자열입니다.
문자열 str1과 str2가 주어질 때, str1이 str2의 부분 문자열이라면 1을 부분 문자열이 아니라면 0을
return 하도록 solution 함수를 완성해 주세요.
프로그래머스의 부분 문자열의 문제를 풀어보도록 하였다. 부분 문자열 문제라고는 하나 이 안에 contains 함수가 포함되어야 한다는 점, 그리고 if문 (조건문)이 필요하다는 점이 보이는 듯하다.
2. 부분 문자열에 대한 나의 풀이
사실 특별한 함수를 사용했다기보다, 코드를 조금 더 정렬했다기보다, 그저 기본적인 풀이를 사용한 것 같아 아쉬웠습니다.
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
if(str2.contains(str1)) {
answer = 1;
}else {
answer = 0;
}
return answer;
}
}
3. 다른 사람의 풀이
아래의 풀이는, 프로그래머스 이용자 549명이 똑같은 답안을 냈다고 하죠. 복사가 안되니 제가 직접 코드를 입력해 보겠습니다. 굳이 if문을 사용하지 않고도, 조건연산자를 통해서 문제를 풀이한 것을 볼 수 있는데요.
class Solution {
public int solution(String str1, String str2) {
return str2.contains(str1) ? 1 : 0;
위의 풀이에서 이용한 조건 연산자는? 표현식 1 : 표현식 2입니다.
조건식 ? 표현식 1 : 표현식 2
위의 조건연산자의 경우 조건식이 '참'이라면 표현식 1이 선택이 되는 것이고, 조건식이 거짓이라면 표현식 2가 선택이 되는 것입니다. 이러한 조건연산자의 경우에는 if else문을 간단하게 표현하고 싶을 때 사용하는 연산자라고 합니다.
결국 위의 문제를 조건연산자를 통해서 풀이를 해본다면
"리턴해라. st1이 str2의 부분 문자열이라면 1이라고 표현하고, 그것이 아니라면 0으로 표현하라"는 뜻이죠
return str2.contains(strt1) ? 1: 0;
결론
이제 문제를 풀며, 반성해보는 시간을 가집니다. 코딩에는 답이 없다곤 하지만, 한 가지 답이 있다고 하는 것은, 반복적인 코드를 지양했는지, 그리고 코드를 더 간편하게 만들 수 있는지에 대한 것이죠. 아직까지 초짜인 제가 풀이할 때는, 굳이 길게 쓸 필요없는 코드까지 쓰는 느낌이 드네요. 여러분들의 풀이는 어떻게 되시는가요?
1. 문제를 본 후, 배운 내용을 활용했는가? | O |
2. 반복적인 코드를 지양했는가? | △ |
3. 코드를 더 간편하게 만들 수 있었는가? | X |
댓글