[프로그래머스 스쿨] 카드 뭉치
2023. 5. 15. 00:23ㆍ코딩테스트/프로그래머스 스쿨 - LEVEL1
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/159994
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[풀이]
<접근방법>
1. cards1 또는 cards2와 goal[k]가 일치하면 계속 진행, 아니면 stop!
2. answer의 길이는 yes와 no가 다르기 때문에, 문자열 복사 방식으로 한 번씩만 넣어주기!
[문제가 있는 코드]
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
// cards1_len은 배열 cards1의 길이입니다.
// cards2_len은 배열 cards2의 길이입니다.
// goal_len은 배열 goal의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* cards1[], size_t cards1_len, const char* cards2[], size_t cards2_len, const char* goal[], size_t goal_len) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer;
int i=0, j=0, stop1=0,stop2=0;
for(int k=0;k<goal_len;k++){
if(strcmp(cards1[i],goal[k]) == 0 && stop1 == 0){
i++;
if(i==cards1_len) stop1=1;
}else if(strcmp(cards2[j],goal[k]) == 0 && stop2 == 0){
j++;
if(i==cards2_len) stop2=1;
}else{
answer = (char*)malloc(sizeof(char)*3);
strcpy(answer,"No");
return answer;
}
}
answer = (char*)malloc(sizeof(char)*4);
strcpy(answer,"Yes");
return answer;
free(answer);
}
<문제점>
1. stop1이 1이어도, 조건 비교를 위해 if(strcmp(cards1[i],goal[k]) == 0 && stop1 == 0) 이 실행된다. 이때 i가 이미 cards1의 길이와 일치해서, cards1[strlen(cards1)]을 읽게되어 오류가 난다. 따라서, i가 cards1의 길이값보다 작은지 아닌지를 정확하게 비교해주어야 한다.
[정답코드]
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
// cards1_len은 배열 cards1의 길이입니다.
// cards2_len은 배열 cards2의 길이입니다.
// goal_len은 배열 goal의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
char* solution(const char* cards1[], size_t cards1_len, const char* cards2[], size_t cards2_len, const char* goal[], size_t goal_len) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
char* answer;
int i=0, j=0;
for(int k=0;k<goal_len;k++){
if(i<cards1_len&&strcmp(cards1[i],goal[k]) == 0){
i++;
}else if(j<cards2_len&&strcmp(cards2[j],goal[k]) == 0){
j++;
}else{
answer = (char*)malloc(sizeof(char)*3);
strcpy(answer,"No");
return answer;
}
}
answer = (char*)malloc(sizeof(char)*4);
strcpy(answer,"Yes");
return answer;
free(answer);
}
'코딩테스트 > 프로그래머스 스쿨 - LEVEL1' 카테고리의 다른 글
[프로그래머스 스쿨] 2016년 (1) | 2023.07.21 |
---|---|
[프로그래머스 스쿨]크기가 작은 부분문자열 - 숫자 범위 (0) | 2023.05.11 |