인프런 커뮤니티 질문&답변
1-D 팰린드롬 문제 질문드립니다
작성
·
258
0
큰돌님 코드보기전에 교안보고 배운대로 코드 짜봤습니다.
devc++ 예제를 바꿔봐도 잘돌아가고 런타임 에러는 안뜨던데 백준에 제출하니 런타임 세그폴트 오류가 뜨네요
몇가지 궁금한 점이 있어서 질문드립니다
1. 누더기 코드지만 왜 안돌아가는지 알아야 발전이 있을거같아서... 아래 코드의 어디가 왜 문제인지 여쭤봅니다
2. 또한 강의영상보면 입력 범위 설정조건에 대해서는 거의 코드에 안쓰시던데
더 넓은 범위가 와도 적용가능한 코드로 짜셔서 그런건가요? 보통 아래처럼 코드에 입력 범위 제한 등을 적을 필요는 없나요?
3. 이렇게 IDE결과에는 찾지 못하고 백준에서 제출 후 문제가 생기는 경우를 예방하기 위한 방법이 있을까요?
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#include <bits/stdc++.h>
using namespace std;
string s;
string ori;
int chk =1;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
1<=s.size()<=100;
cin >> s;
for(int i=0; i<s.size(); i++) // 불필요한 코드
ori[i] = s[i]; // ori = s 로 해도 같은 의미이다 << 문자열은 동적 할당 배열이니 저렇게 받아서 할당해보았습니다
reverse(s.begin(), s.end());
for(int i = 0; i<s.size(); i++) // 불필요한 코드2
if(s[i]!=ori[i]) // if(ori == s) 로 판단해도 된다
chk = 0;
cout << chk << "\n";
return 0;
}
코딩테스트 제출전에도 시간 및 메모리 제한, 런타임 오류 등을 확인할 방법이 있나 여쭤봅니다
답변 1
1
큰돌
지식공유자
음.
1. 클린코드 : 필요없는건 지우고.
2. 로직상 맞는지 확인
3. 반례 스스로 생각하면서 확인
이렇게 하시면 됩니다. 그저 IDE에서 했는데 된다. 라고 해서 제출하는것보다는 저 3가지의 과정을 하신다음에 하는 걸 추천드립니다. 주신 코드에 주석 다 달았습니다.
#include <bits/stdc++.h>
using namespace std;
string s;
string ori;
int chk =1;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//왜 이런게 있죠?
1<=s.size()<=100;
cin >> s;
// 뭐죠?
for(int i=0; i<s.size(); i++) // 불필요한 코드
ori[i] = s[i]; // ori = s 로 해도 같은 의미이다 << 문자열은 동적 할당 배열이니 저렇게 받아서 할당해보았습니다
reverse(s.begin(), s.end());
// 불필요한 코드가 아니라... 괜찮은 코드에요. ori == s로 한번에 해도 되지만
// for문도 된답니다.
for(int i = 0; i<s.size(); i++) // 불필요한 코드2
if(s[i]!=ori[i]) // if(ori == s) 로 판단해도 된다
chk = 0;
cout << chk << "\n";
return 0;
}
#include <bits/stdc++.h> // --- (1)
using namespace std; // --- (2)
string a; // --- (3)
int main()
{
a[4] = 'a'; // --- (4)
cout << a << "\n"; // --- (5)
return 0; // --- (6)
}
예를 들어 위의 코드가 나올 것이라 생각하시나요?
문자열은 문자열을 "할당" 하고 그리고 그걸 기반으로 요소에 대한 참조가 일어납니다.
빈문자열이든 뭐든..
문자열의 크기조차 결정되지 않았는데 어떻게 ori 의 i번째 요소에 대한 참조에 대한 코드를 작성하시나요?
예를 들어 배열의 크기가 설정되지 않은 vector<int> v라고 해놓고 v[10]이렇게 하는 것과 똑같은 코드에요.






감사합니다!
아하! 제가 문자열에 대해 잘못 이해하고 있었네요
문자열은 동적인데 제가 크기를 미리 정하는 것도 말이 안되겠네요
아래와 같이 수정후 제출하니 잘 돌아갔습니다! 감사합니다!
ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ
입출력 속도를 빠르게 해주는 코드라고 알아서 빠르면 좋겠지 생각하고 넣었습니다. 입력이 이미 초기에 주어지고 출력 양도 적어서 불필요할까요?
그럼 어떤 상황에서 위 코드를 써야 할까요? 연산내에서 입출력이 많은 상황에서만 쓰면 될까요? 위 동기화를 풀면 c의 scanf printf 등의 함수들과 같이 쓰면 안된다고는 알고있습니다
ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ