티스토리 뷰
char a[12]={}; //입력을 받기 위한 문자 배열
int A,B;
__libc_start_main(){
A=B=0; //점수를 담기위한 변수의 초기화
read(0,a,12); //12만큼 받는 이유는 입력 버퍼에서 '\n'까지 처리하기 위함, (물론 a에는 '\n'이 들어갈 자리가 없습니다, 버려집니다)
A=(a[0]-48)*13+(a[2]-48)*7+(a[4]-48)*5+(a[6]-48)*3+(a[8]-48)*3+(a[10]-48)*2; //첫번째 줄 처리
read(0,a,11); //두번째 줄 입력
B=(a[0]-48)*13+(a[2]-48)*7+(a[4]-48)*5+(a[6]-48)*3+(a[8]-48)*3+(a[10]-48)*2+2; //두번째 줄 처리
if(A>=B) write(1,"cocjr0208",9); else write(1,"ekwoo",5); //결과
_exit(0);
}main;
풀이 : 구현
0. 숫자의 범위는 한자리수 입니다. 즉 바로 문자를 정수로 바꾸어 줄 수 있습니다 -'0'
1.
문자열 리터럴 " " 은
"asdfsdfsd" 이렇게 적어도, 프로그램 실행시 저절로 메모리에 할당이 되며, 인자로 넘길때는 첫번째 값의 주소가 넘어갑니다. 수정을 하지 않는 문자열이라면 즉 따로 변수로 만들어서 저장하여 사용하지 않아도 됩니다. 수정은 불가합니다.
write(1,"cocjr0208",9); else write(1,"ekwoo",5);
여기서 "cocjr0208" "ekwoo"을 굳이 char 형 배열에 저장할 필요가 없다.
2.
입력이 두줄로 주어질때
ex)
a a a a a a : 문자 11개 (공백도 문자입니다)
b b b b b b : 문자 11개 (공백도 문자입니다)
c언어의 입력 버퍼 에선 'a' ,' ', 'a' ,' ', 'a' ,' ', 'a' ,' ', 'a' ,' ', 'a' , '\n', 'b' ,' ', 'b' ,' ', 'b' ,' ', 'b' ,' ', 'b' ,' ', 'b' 로 들어오게 됩니다. 그러므로 처음 입력을 받을 때는 개행문자 '\n'을 고려하여 1바이트 더 많이 입력으로 받아야 합니다.
그래서 입력을 받는 배열의 크기도 개행문자를 고려하여 12 입니다.
만약 배열의 크기가 11인데 입력 버퍼에서 배열의 크기보다 더 많은 byte을 읽는다면 알수없는 동작이 발생합니다.
그러나 배열의 크기가 충분히 크고 버퍼에 있는 byte 보다 더 많은 값을 읽는다면 버퍼에 있는 값 전부 읽은 다음 종료됩니다.
고로 배열의 크기를 충분히 크게 한다음, 초과하지 않을 만큼 버퍼에서 byte을 취하는 것이 안전합니다.
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 32344번 유물 발굴 (백준) (0) | 2025.01.26 |
---|---|
c언어 30891번 볶음밥 지키기 (백준) (0) | 2025.01.25 |
c언어 32652번 아카라카 2 (백준) (0) | 2024.11.18 |
c언어 5670번 휴대폰 자판 (백준) (0) | 2024.09.29 |
c언어 7423번 디스크 트리 (백준) (0) | 2024.09.26 |
- Total
- Today
- Yesterday
- BFS
- 플로이드
- 덱
- 최대공약수
- Lazy Propagation
- 기하학
- 세그먼트 트리
- DP
- 그래프
- 백준
- Krustal
- 오프라인 쿼리
- C언어
- C++
- 최소 스패닝 트리
- 스택
- XOR
- 그리디
- 정렬
- 1835번
- union
- 1835
- 누적합
- PASCAL
- find
- DFS
- Segment Tree
- 브루트포스
- java
- 누적 합
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |