Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- unity3d
- portal
- 1인 개발
- 1인 게임
- 퐁
- 합격
- Vampire Survivors
- 정처기 필기
- 3회차
- 유니티
- 1인 게임 제작
- 토이 프로젝트
- 게임제작
- 정처기
- 프로그래머스 #최소힙 #우선순위 큐
- 유니티 3D
- 게임 개발
- 자바스크립트 게임
- 정보처리기사
- FPS
- Unity
- 필기
- Pong
- 자바스크립트
- 게임 제작
- 1인 게임 개발
- 유니티3d
- Unity2D
- Unity #Unity2D #Portal
- 게임
Archives
- Today
- Total
Coding Feature.
백준) strlen을 for loop 조건문에 넣어서 시간 초과가 뜨는 경우(C언어) 본문
위 문제를 푸는 동안 답은 맞지만 계속 시간 초과가 떠서 헤메다가 질문 게시판에서 발견한 답변이 있는데 잘못하면 놓치기 쉬운 디테일인 것 같다.
// 시간 초과.
for(i=0;i<strlen(str);i++){
if(str[i] >= 'a' && str[i] <= 'z')
ABC[str[i]-'a']++;
else if(str[i] >= 'A' && str[i] <= 'Z')
ABC[str[i]-'A']++;
}
// 시간 초과 발생 X
int l = strlen(str);
for(i=0;i<l;i++){
if(str[i] >= 'a' && str[i] <= 'z')
ABC[str[i]-'a']++;
else if(str[i] >= 'A' && str[i] <= 'Z')
ABC[str[i]-'A']++;
}
문자열의 크기가 매우 크다면 for 문 내 조건 안에 strlen 함수를 넣느냐 밖에 넣느냐에 따라 런타임이 크게 달라지는 것을 알게되었다. for loop을 돌릴때마다 조건문 내 연산이 수행되면서 strlen() 함수를 문자열 크기만큼 반복해서 호출해서 발생하는 문제인 것 같다. 만약에 문자열의 크기가 1,000,000이라면 strlen 함수를 1,000,000번 호출하는 것이다.
for문 내 조건문에 쓰이는 함수는 밖에서 사용해야겠다.
'코딩테스트 > 백준 solved.ac' 카테고리의 다른 글
백준) 10816번: 숫자 카드 2 in C/C++ (이진 트리, map) (0) | 2023.07.30 |
---|---|
백준) 1920번: 수 찾기 in C/C++ (0) | 2023.07.30 |
백준) 1152번: 단어의 개수 in C (0) | 2023.07.29 |
백준) 16985번: Maaaaaaaaaze in C (0) | 2023.07.29 |
백준) 16236번: 아기 상어 in C (0) | 2023.07.29 |