문제설명
두배열의 같은 문자의 개수를 반환 하라
제한사항
입출력 예
말로하는 순서도
solution함수선언 및 매개변수 char형 배열s1선언 char형 s1배열의 길이변수 s1_len선언 배열 s2선언 배열의 길이변수 s2_len 선언 반환형 int
int형 정답 및 최종반환 변수 answer선언
for문 s1의 길이보다 변수가 작을때 변수 증가(x)
for문 s2의 길이보다 변수가 작을때 변수 증가(i)
if strcmp함수를 활용 s1의 첫for문 변수위치의 값과 s2의 두번째for문 변수위치의 값이 같을때(!로 값을 뒤집음)
answer을 값을 증가시킴
최종반환
소스코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// s1_len은 배열 s1의 길이입니다.
// s2_len은 배열 s2의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
int solution(const char* s1[], size_t s1_len, const char* s2[], size_t s2_len) {
int answer = 0;
for(int x=0; x<s1_len; x++)
{
for(int i=0; i<s2_len; i++)
{
if(!strcmp(s1[x],s2[i]))
{
answer++;
}
}
}
return answer;
}
풀이
strcmp는 주어진 두 문자열이 같을 경우 0을 반환 아닐경우 1을 반환 하는 함수이다
코드에서 !를 사용한 이유는 반환값 0을 값을 반전 시켜 1을만들어 if문 작동을 위함이다
!를 없이 사용하고 싶을때는 !를 뺴고 조건 뒤에 ==0을 추가 하여도 풀수 있다
시행착오
코드의 형태는 비슷하지만 처음에는 strcmp함수를 사용하지 않고 코드를 만들었었다
말로하는 순서도
solution함수선언 및 매개변수 char형 배열s1선언 char형 s1배열의 길이변수 s1_len선언 배열 s2선언 배열의 길이변수 s2_len 선언 반환형 int
int형 정답 및 최종반환 변수 answer선언
for문 s1의 길이보다 변수가 작을때 변수 증가(x)
for문 s2의 길이보다 변수가 작을때 변수 증가(i)
if s1의 첫for문 변수위치의 값과 s2의 두번째for문 변수위치의 값이 같을때
answer을 값을 증가시킴
최종반환
소스코드
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// s1_len은 배열 s1의 길이입니다.
// s2_len은 배열 s2의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
int solution(const char* s1[], size_t s1_len, const char* s2[], size_t s2_len) {
int answer = 0;
for(int x=0; x<s1_len; x++)
{
for(int i=0; i<s2_len; i++)
{
if(s1[x] == s2[i])
{
answer++;
}
}
}
return answer;
}
풀이
위에 코드는 틀린 코드이다 해당 코드는 문자열을 비교한것이 아닌 주소값을 비교하기때문에 원하는 값이 나오지 않는다
문자열의 비교는 단순히 연산자로는 불가 하다는것을 알수 있는 부분이었다
출처: 프로그래머스 코딩테스트연습 입문문제, https://school.programmers.co.kr/learn/courses/30/lessons/120903
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr