강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

celestial_님의 프로필 이미지
celestial_

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

31. 탄화수소 질량

31번 질문있습니다.

작성

·

192

0

선생님, 이런식으로 풀었고 돌려보니 잘 결과가 나오는걸 알 수 있는데 
채점폴더에서는 0점을 받아서 의문이 듭니다. 
제 코드에 어떠한 부족함이 있는지 가르침을 주시면 정말 감사하겠습니다. 
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main() {

	char ox[100];

	cin >> ox;
	int index = 1;
	int ccount = 0, hcount = 0;
	int value = 0;
	
	
	if (ox[index] != 'H') {
		while (ox[index] != 'H') { ccount++; index++; }
		for (int i = ccount; i > 0; i--) { value += (ox[i] - '0') * pow(10, ccount - i); }
		value *= 12;
		
		index++; //H의 바로다음
		//while (ox[index] != '\0') { hcount++; index++; }
		//cout << index << endl;
		if (ox[index] == '\0') { value++; printf("1%d \n", value); }
		while (ox[index] != '\0') { hcount++;  index++; }
		
		for (int i = index - 1; ox[i]!='H'; i--) { value += (ox[i] - '0') * pow(10, index-1 - i); }
		printf("%d \n", value);
	}
	if (ox[index] == 'H') {
		value = 12; index++; 
		if (ox[index] == '\0') { printf("%d \n", ++value); }
		if (ox[index] != '\0') {
			while (ox[index] != '\0') { hcount++; index++; }
			
			for (int i = index - 1; i > hcount; i--) { value+=(ox[i] - '0')* pow(10, index - 1 - i); }
			printf("%d \n", value);
		}
	
	}
	
		
	
	
}

답변 1

2

김태원님의 프로필 이미지
김태원
지식공유자

0점이 나오는 코드는 아닙니다. 제 컴퓨에서 채점해보니 60점 나옵니다. 1, 2, 3번데이터는 잘 나옵니다.

4번, 5번 데이터가 틀린답으로 결과가 나옵니다. 채점 폴더에 있는 4번, 5번 입력 데이터를 직접 입력해서 출력하면서 디버그 해보세요. 바로 오류를 찾을 수 있을 겁니다. 이런식으로 공부하라고 채점데이터를 제공한 것입니다.  본인이 짠 코드의 에러를 찾아나가면서 클리어 할 때 문제해결력이 길러집니다. 이 순간이 진짜 중요한 공부이니 스스로 찾아보기 바랍니다. 몇 시간을 해도 못 찾겠으면 그 때 아래 제가 수정한 코드를 보세요.

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main() {

	char ox[100];

	cin >> ox;
	int index = 1;
	int ccount = 0, hcount = 0;
	int value = 0;
	
	
	if (ox[index] != 'H') {
		while (ox[index] != 'H') { ccount++; index++; }
		for (int i = ccount; i > 0; i--) { value += (ox[i] - '0') * pow(10, ccount - i);}
		value *= 12;
		
		index++; //H의 바로다음
		if (ox[index] == '\0') { value++; printf("%d\n", value);}
		else{        //C2H와 같은 입력에서 두 번 출력되지 않게 방지하기 위해 if ~ else ~ 로 바꿈
			while (ox[index] != '\0') { hcount++;  index++; }
			for (int i = index - 1; ox[i]!='H'; i--) { value += (ox[i] - '0') * pow(10, index-1 - i);}
			printf("%d \n", value);
		}	
	}
	if (ox[index] == 'H') {
		value = 12; index++; 
		if (ox[index] == '\0') { printf("%d \n", ++value); }
		if (ox[index] != '\0') {
			while (ox[index] != '\0') { hcount++; index++; }
                         //CH123와 같은 입력에서 123을 제대로 계산하기 위해 for문이 반복횟수 조정
			for (int i = index - 1; i >= (index-hcount); i--) { value+=(ox[i] - '0')* pow(10, index - 1 - i);} 
			printf("%d \n", value);  
		}
	
	}
	
		
	
	
}

celestial_님의 프로필 이미지
celestial_

작성한 질문수

질문하기