회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
추가된 문제
문제 순위
문제
푼 사람이 한 명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
1
채점 현황
랭킹
게시판
그룹
더 보기
재채점 기록
블로그
강의
실험실
도움말
BOJ Stack
BOJ Book
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
solved.ac
글쓰기
질문 도움말
자주묻는 질문
반례를 모르겠습니다
2941번 - 크로아티아 알파벳
syoon0425
1년 전
0
예제는 다 맞았는데 계속 틀립니다.
계속 들여다봐도 안 보여서 혹시 제 코드 문제점 지적해주실 분 계실까요
#include <stdio.h> #include <string.h> int alpc(char* arr){ if(*(arr+1) == '=') return 1; else if(*(arr+1) == '-') return 1; else return 0; } int alpd(char* arr){ if(*(arr+1) == 'z'){ if(*(arr+2) == '=') return 2; else return 0; } else if(*(arr+1) == '-') return 1; else return 0; } int alpl(char* arr){ if(*(arr+1) == 'j') return 1; else return 0; } int alpn(char* arr){ if(*(arr+1) == 'j') return 1; else return 0; } int alps(char* arr){ if(*(arr+1) == '=') return 1; else return 0; } int alpz(char* arr){ if(*(arr+1) == '=') return 1; else return 0; } int sortout(char* arr){ if(*arr == 'c') alpc(arr); else if(*arr == 'd') alpd(arr); else if(*arr == 'l') alpl(arr); else if(*arr == 'n') alpn(arr); else if(*arr == 's') alps(arr); else if(*arr == 'z') alpz(arr); else return 0; } int main(void){ int len, numalp, flag = 0; char arr[101]; scanf("%s", arr); len = strlen(arr); for(int i=0; i<len; i++){ flag = sortout(arr+i); if(flag) i += flag; numalp++; flag = 0; } printf("%d",numalp); return 0; }
dldyddlwl
1년 전
0
.
// 자, 정말 잘해주셨는데요!! 몇 가지만 살펴봅시다 int sortout(char* arr){ // 자, 함수라는 것에는 리턴 타입이라는 것이 존재하죠? if(*arr == 'c') alpc(arr); // 그런데 이 리턴타입이라는 녀석이!! 성가신 부분이 모든 경우에 return을 해야한다 else if(*arr == 'd') alpd(arr); // 는 것입니다. else if(*arr == 'l') alpl(arr); // 즉, 글쓴이님의 코드와 같이, return 값이 else를 제외하고는 없죠?? else if(*arr == 'n') alpn(arr); else if(*arr == 's') alps(arr); else if(*arr == 'z') alpz(arr); else return 0; } /* 따라서, 아래와 같이 모든 경로에서 return을 시켜줘야만 합니다. 리턴경로가 하나라도 비어있는 경우는 위험합니다(무슨 일이 일어날지 모름~), 따라서 오답이 나올 수 있습니다. int sortout(char* arr) { if (*arr == 'c') return alpc(arr); else if (*arr == 'd') return alpd(arr); else if (*arr == 'l') return alpl(arr); else if (*arr == 'n') return alpn(arr); else if (*arr == 's') return alps(arr); else if (*arr == 'z') return alpz(arr); else return 0; } */ int main(void){ int len, numalp, flag = 0; // 지역변수, local variable, numalp가 초기화 되지 않은채로 char arr[101]; scanf("%s", arr); len = strlen(arr); for(int i=0; i<len; i++){ flag = sortout(arr+i); if(flag) i += flag; numalp++; // 그대로 사용되고 있습니다, 지역변수의 경우에는 항상 꼭 !! 무조건 초기화시켜주세요!! flag = 0; } printf("%d",numalp); return 0; } // 자, 마무리로 다시 한번 짚고 갑시다!! // 1. 지역변수는 반드시 초기화한다. // 2. return type을 가지는(void가 아닌) 함수는 모든 경우에 반드시 return을 해야만 한다.
댓글을 작성하려면
로그인
해야 합니다.
syoon0425 1년 전
예제는 다 맞았는데 계속 틀립니다.
계속 들여다봐도 안 보여서 혹시 제 코드 문제점 지적해주실 분 계실까요