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

ㅎㅅ님의 프로필 이미지
ㅎㅅ

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-F

1-F 질문

작성

·

356

·

수정됨

0

http://boj.kr/3b4b7ecd25584d88aa330a92277594f5

스캔으로 받았는데 출력형식이 자꾸 다르다고하네요 무엇이 문제일까요??

겟라인으로 받으면 세그먼트폴트가뜹니다

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅅ님ㅎㅎ

	for(int i = 0; i < 103; i++){
		s2[i] = s[i]+13;

앞의 코드를 보시면 103번까지 반복해서 출력을 하고 있습니다.

입력 받은 만큼만 출력을 해야합니다.

getline으로 하고 해당 문자열 만큼 출력하는 로직이신가요?

만약 그렇게 했는데도 에러가 뜨신다면 해당 부분 코드 공유도 부탁드립니다.

 

감사합니다.

ㅎㅅ님의 프로필 이미지
ㅎㅅ
질문자

사이즈만큼 반복해도 같은오류가 뜹니다

http://boj.kr/95b5f35d97f644b6b6edb389806e2ef9

링크입니다 감사합니다

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅅ님 ㅎㅎ

해당 부분은 s2의 사이즈를 정해주지 않고 s2[i]이렇게 접근해서 그런것 같아요. s2의 사이즈를 s만큼 정해서 다시 정의를 하고 하시면 됩니다.

#include <bits/stdc++.h>
using namespace std;
string s,s2;

int main(){
	getline(cin,s);
        s2 = string(s.size(), 'a');
	for(int i = 0; i < s.size(); i++){
		s2[i] = s[i]+13;
		if(s[i] > 109 && s[i] < 123){s2[i] = s[i]-13;}
		else if(s[i] > 77 && s[i] < 91){s2[i] = s[i]-13;}
		else if(s[i] == ' '){s2[i] = ' ';}
		else if(s[i] >= 48 && s[i] < 58){s2[i] = s[i];}
		cout << s2[i];
	}
	return 0;
}

앞의 코드처럼 해보시겠어요? string(size, char)은 size만큼 char로 채운다라는 의미입니다. 임시로 s2라는 문자열을 a라는 문자로 s.size()만큼 가득채워본 이후 s2[i]로 접근하게 만들었습니다.

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요.

주신 링크를 보니 해당 문제는 입력받는 값과 출력값의 형식을 제대로 입력하지 않아 발생하는 문제 같아요.
입력값과 출력값이 다르다고 한다면, 개행 문자나 공백 등의 차이로 인한 문제일 가능성이 높습니다.

입력값과 출력값의 예시를 잘 확인하시고, 입력값을 정확하게 받아오고 출력값 역시 정확한 형식으로 출력해주셔야 합니다.
getline() 함수로 입력값을 받으시는데 세그먼트 폴트가 발생한다면 입력 받은 문자열의 인덱스가 배열의 참조 범위를 벗어난 것일 수 있습니다.
간단한 배열 경계 검사로 세그먼트 폴트를 해결하실 수 있을 것입니다.

만약에 문제 해결에 어려움이 있다면, BOJ 커뮤니티나 스터디 그룹 등 해당 문제와 관련된 곳에서 질문하시면 더 도움을 받을 수 있을 것입니다.

좋은 결과 있길 바랍니다. 감사합니다.

ㅎㅅ님의 프로필 이미지
ㅎㅅ
질문자

답변감사합니다

ㅎㅅ님의 프로필 이미지
ㅎㅅ

작성한 질문수

질문하기