본문 바로가기

분류 전체보기59

프로그래머스 짝수와 홀수(동적 할당, 문자열 리터럴의 특성) 되게 쉬운 문제인데, 동적 할당의 중요성과 문자열 리터럴의 특성을 공부해 볼 수 있었다. 기존 코드sizeof(char)로 1바이트만 할당했음에도 정상작동 되길래 이상함을 느꼈다.answer에 들어갈 값인 "Even" 이나 "Odd"는 4-5바이트가 필요하기 때문이다.(NULL을 고려하면 6) 기존 코드가 동작하는 이유:1. 문자열 리터럴"Even"이나 "Odd"같은 문자열 리터럴은 프로그램이 실행될 때 읽기 전용 메모리에 저장된다. 따라서 위 코드에서 answer는 실제 동적 할당된 메모리가 아닌 읽기 전용 메모리를 가리킨다. 문자열 리터럴을 할당하는 것 자체나 동작엔 문제가 없다. 포인터가 읽기 전용 메모리를 가리키는 것이기 때문에, 코드는 정상적으로 "Even" 또는 "Odd"를 반환하게 된다. 그.. 2024. 10. 23.
프로그래머스 문자열을 정수로 바꾸기('0'의 아스키 코드는 48) 0단계 문제들이 다소 반복적으로 느껴져서 1단계로 넘어왔다1단계에서 가장 쉬운(정답률이 가장 높고, 사람들이 많이 푼) 문제였지만 배운 게 많아 글을 작성하게 되었다.  문제만 보면 단순해 보이고 어떤 함수를 이용해서 한 방에 풀 수 있을 것 같지만 ..  처음 작성했던 코드:1. 아스키코드에서 문자1과 숫자1이 48만큼 차이나는 걸 보고 작성하였다.2. 변수 j는 자릿수 표현을 위해 pow(10, len - 1)을 대입하였다.3. 지금 보니 좀 바보같지만 -1을 곱하면 음수가 되는걸 answer =- answer로 처리했다  개선한 코드:1. 문자에서 '0'을 빼면 숫자가 된다고 한다. 왜냐하면 '0' 의 아스키코드 값은 48이기 때문이다.2. 변수 j를 생성해 자릿수를 표현한 기존과 다르게 이전에 계.. 2024. 10. 23.
프로그래머스 모음 제거(문자열의 끝에는 '\0'을 넣자) 문제 내가 생각한 문제풀이법:1. 반복문을 통해 my_string의 값을 0부터 strlen(my_string)까지 훑으며 모음이 나오면 continue제어문으로 실행 흐름을 변경시킨다.2. printf로 결과를 출력한다 처음에 작성한 코드 문제점:1. malloc으로 할당할 때 int가 아니라 char로 길이에 맞는 메모리를 할당해야 했다.2. answer에 값을 대입해야 하는데 printf로 값을 출력하려 했다.3. 문자열의 끝에 들어갈 '\0'을 고려하지 않았다. 동적 할당을 할 때에도 +1을 해주어야 한다. 개선한 코드:1. 앞서 말한 문제점을 전부 고쳤다.2. 변수 j를 선언해 마지막에 '\0'을 삽입해 문자열의 끝을 맺었다. 동적 할당을 배열 문제에서 두 번 밖에 안 써봐서 할당 길이를 상황에.. 2024. 10. 22.
프로그래머스 중앙값 구하기(버블 정렬) 바깥쪽 반복문 i:배열의 전체 패스를 관리한다. 한 패스에서 배열에서 가장 큰 값을 끝으로 보내고, 그 다음 패스에선 다음으로 큰 값을 뒤로 보내고 나머지 부분을 정렬한다.array_len - 1번 반복하는 이유는 마지막 남은 요소는 정렬이 필요 없기 때문이다. 안쪽 반복문 j:배열 내의 인접한 요소를 반복적으로 비교하여 인접한 두 요소를 교환할지 여부를 결정한다.array_len - i - 1까지 반복하는 이유는 이미 정렬된 마지막 부분은 건너뛰어도 되기때문이다. i가 커질수록 마지막 부분은 이미 정렬된 상태가 되므로 굳이 비교하지 않는다. 인접한 두 요소 비교 (array[j] > array[j + 1]):배열의 array[j]와 array[j + 1] 두 요소를 비교하여, 앞쪽 값이 더 크다면 교환.. 2024. 10. 22.
strlen, strcpy, strcat 프로그래머스 0레벨 '접두사인지 확인하기' 문제이다. 이 문제를 풀 때 내가 생각한 조건들은,1. is_prefix의 길이가 my_string 보다 길다면 접두사가 될 수 없다.2. is_prefix[i] 와 my_string[i] 가 같지 않다면 접두사가 될 수 없다.이다.따라서 코드를,#include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.int solution(const char* my_string, const char* is_prefix) { int answer = 1; int i = 0; int l = 0; for(; is_prefix[i]; i++){ if(is_pref.. 2024. 10. 22.
Printf 출력 키워드와 형식 키워드%d%f%c%s출력 형식정수(10진수)실수문자문자열  data변수의 65라는 값을 %c로 출력하라고 지시하면 65를 아스키 값으로 간주하여 문자 A를 화면에 출력함.%d로 출력하라고 지시하면 65를 10진 정수로 간주하여 숫자 65를 화면에 출력함.  실수를 표현하는 키워드인 %f로 float형 변수 value를 출력하면 소수점 6자리까지 값을 출력해줌.하지만 정수를 표현하는 키워드인 %d를 입력하면 엉뚱한 숫자가 나옴.(오류를 표현하는 숫자)  32비트 정수형에서의 음수 최댓값인 -1과 32비트 정수형에서 최댓값인 4294... 는32개의 비트가 모두 1인 값이므로 부호를 고려하지 않는 %u 키워드를 통해 출력하면 같은 값이 출력된다.  %d와 %u는 변수 크기를 4바이트 값으로 변환해서 출력한다.. 2024. 10. 21.