목록전체 글 (149)
Taking baby-developer steps
arr4i에 오름차순으로 정렬하는데 있어서 sigfault가 자꾸 발생하는데, sort4i 함수에 swap_int 함수 호출 전에 printf()를 한번 이상 호출하면 sigfault 없이 의도한 결과가 출력되는 기 현상을 발견했고 , 이를 해결하기 위해 결국 lldb로 디버깅을 시작했다. 입력값은 "2" "1" "0" 순으로 넣었고, sort4i(arr4i를 정렬하기 위한 함수)내에 int형 포인터 2개를 인자로 받아 두개의 값을 swap하는 함수(k=1일 때("2"만 들어있던 arr4i 내에 "1"을 인덱스 1의 자리에 넣고, 오름차순 정렬을 위해 인덱스 0의 자리에 있는 "2"와 자리를 바꿀 때) swap_int에서 EXC_BAD_ACCESS (code=1, address=0x0)이 발생함을 확인했..
이번 과제에서 중요한 요인은 "명령을 내리는 횟수를 최소화" 하는 것이기 때문에 시간 복잡도는 문제가 되지 않는다고 판단했다. 따라서 indexing을 하는 arr4i에 입력 값을 하나씩, atoi로 int로 변환 한 후, arr4i에서 버블 정렬 처럼 정렬해주면서 오름차순으로 정렬하며 넣었다.(각 입력값의 index를 얻는 것이 목적이므로) 현재 arr4i[k]값과 sort4i 사이에, 스택으로 쓸 리스트 구조체에 arr4i[k]값을 입력값의 순서대로 저장하는 부분이 들어가면 좋을 것 같다.(+코드를 작성하는 와중에 쓴 로그라, k++ 구문이 빠져있다.) + 첫번째 사진 내 ft_atoi 함수 내에서 int의 max 혹은 min 값을 넘어 가는 값이 input으로 들어온 경우 print_error()함..
저번 파싱부 구현에서 이제 두가지 경우를 더 에러 처리해야함을 언급했다. int 범위를 넘어서는 경우와 중복인 수가 들어온 경우인데, 특히 중복인 수가 들어온 경우, 이전 값과 중복 되는 지를 검사하는게 필요하고, 후에 정렬을 위해서 다 차이가 1씩만 날수 있도록 들어온 입력값에 오름차순으로 인덱싱(혹은 라벨링)을 해주기 위해서 arr4i(arr for indexing)를 동적 할당해주고, 입력 값을 오름 차순 정렬해 주면서 값을 넣을 것이다. 앞서서 input을 체크하는 과정에서 인풋으로 몇개의 숫자가 들어왔는지(input_amount)값을 얻었기 때문에 바로 동적할 수 있다.
지난 포스팅에서 언급했던 count_chunk가 command line에서 넣어준 입력값들이 몇개 인지 세는 동작을, 의도대로 잘 동작하는 것을 확인했다. count_chunk 함수를 이용해, 1. 쌍 따옴표 안에 다른 입력 값 없이 space만 있는 경우 에러 메세지 출력과 함께 프로그램 종료, 2. 정상 입력의 경우 전체 input값의 수를 알게 되었다. is_full_of_digits함수를 추가해, digit이 아닌 문자가 끼여있을 경우(space를 제외하고) error 메세지를 출력하게 했다. => 정상 입력시엔 인풋이 총 몇개인지 표시했다. ****생각난 테스트 케이스******** 이 경우, argc가 4인걸로 봐선, argv[3] = "\"2\"5" 인것 같은데, 이경우 과제에서는 2와 5 ..
추상 자료형(ADT)까지는 아니지만 일단 대략적으로 구현할 프로그램의 main문을 어떻게 구상할 것인지 간단하게 정의해 적어보았다. (그 외 떠오르는 파싱부에 필요한 작은 함수들까지.) 파싱부 구현을 위해 다음과 같이 예외처리 사항, 정상 입력값에 대해서 어떻게 처리 할 지를 노트에 써가며 브레인 스토밍 해봤다. 먼저 과제에서 요구하는 에러 메세지가 출력되는 사항들을 처리하는데 필요한 인자와 함수들에 대해서 정리해봤다. 그리고 " "(따음표 안에 digit 없이 space만 들어온 경우)와 같은 케이스에서는 에러처리(혹은 아무일도 일어나지 않고 프로그램 종료)를 해야하고, 또 정상 입력값에서는 하나의 string을 여러개의 int(정수)입력값으로 바꾸어 줘야하는 데, 이 부분에서 이전에 문자열 split..
두개의 스택만을 이용해, 특정한 명령어들만 사용하여, 입력값을 오름차순으로 정렬하는 과제이다. 단, 최소의 움직임(명령어를 최소한)으로 정렬해야한다. 즉, 시간 복잡도는 별로 상관 없어 보인다. 피봇값을 기준으로 정렬하는 퀵정렬과, 굳이 따지자면 그리디 알고리즘에 가까운 방식으로 푸는 방법이 흔한 것 같다. 먼저 퀵정렬을 택해 구현을 해보자는 마음이 들었다. 퀵정렬을 택할 경우, 과제에서 요구하는 수준의 명령어 수 범위 내에서 정렬을 해내려면 최적화에 아주 힘써야한다고 하던데..! 일단 떠오르는 아이디어들을 적어가면서 구현 해보고, 안되겠다는 판단이 들면 다른 방식으로도 구현해보면서 정렬 알고리즘들에 가까워 지는 시간이 되었으면한다.(소중한 배움의 기회니까!) - 퀵정렬 먼저 퀵 정렬로 정렬을 해봐야겠다..
그 동안 학습로그를 잘 올리지 못했다.. 사실 printf 과제도 만족할 만한 가독성을 갖추고, 디펜스까지 잘 준비해서 완료하고서 다음 과제로 넘어왔지만(그것도 거의 끝나가는 중이다..!), 노션에 정리하면서 하는게 편하다보니, 공개된 블로그에는 소홀해져 버렸다..! 다시 학습 로그를 부담없이(형식에 얽매이지 말고!) 하루에 하나씩 쓰는것을 목표로 잘 해봐야겠다며.. 마음을 다스리며 블로그로 돌아왔다! 매일매일의 학습 기록은 노션에 잘 정리한 여러 개념 들관 또 다르게 도움이 될테니..! => 완벽한 동료 평가를 위해..! 그리고 빼 먹은 부분들을 계속 셀프 체크 하고 이론 공부 단단히 하느라 평가 준비를 계속함. 평가 준비를 하다 하다가 떨리는 마음으로 3/27에 첫 평가 3번 받고, 통과! 😹 => ..
* 이 자료는 다음 링크의 내용을 빠르게 의역해서 정리함으로서, 개인의 학습 용도로 정리한 것입니다* https://www.netsurion.com/articles/top-5-linux-log-file-groups-in-var-log Top 5 Linux log file groups in/var/log | Netsurion Top 5 Linux log file groups in/var/log --> --> October 29, 2014 --> 2 min read --> If you manage any Linux machines, it is essential that you know where the log files are located, and what is contained in them. Such ..
오늘 목표 ft_printf() 함수 최대한 짜보기 한 기능(분기, 경우의 수) 단위로 확인 하며 코드 작성하기 오늘 한 일 ft_printf() 함수 최대한 짜보기
오늘 목표 ft_printf() 구현 고민 초기 컨셉 코드 구현 오늘 한 일 ft_printf() 구현 고민 이번 ft_printf()의 구현에 있어서 buffer management를 해서는 안된다는 금지 사항이 왜 들어갔을까를 더 고민하게 됬다. 저번 과제였던 get_next_line에서는 시스템 콜인 read()의 호출을 최소화 해야한다는 사항이 있어서, 동적할당을 이용해 버퍼 메모리 관리를 했었는데, 그것과 관련이 있다고 생각한다. 이번 ft_printf()에서는 버퍼를 쓰지 못하게 하는 대신 시스템 콜의 호출을 많이 하게 하는 거고, 이를 통해 1circle에서 cpu 점유율이 높은 함수(많은 시스템 콜 / ft_printf)와 메모리 점유율이 높은 함수(buffersize에 맞는 메모리를 할당..