문제 풀기에 앞서, 풀 문제들에 대하여 알아보자.
코드업에 포인터를 검색했을 때 나오는 문제이다. 저 문제들을 풀고 더 문제를 찾아보도록 하자.
성공률이 높은 부분 문자열을 먼저 풀어보자.
📒부분문자열 (코드업, 1810)
입력
첫째 줄에 1개의 문자열이 입력된다. 문자열의 최대 길이는 100미만이다.
둘째 줄에 부분문자열의 시작위치 a와 끝위치 b가 정수로 입력된다. (단 0<=a<b<100)
출력
입력받은 문자열에서 a번째 문자부터 b번째 문자까지를 출력한다.
문제 조건이 있다. 배열을 절대 사용하지 못한다는 것이다.
그러면 우리는 포인터로 풀기로 하자.
먼저 힌트는 배열대신 동적메모리 할당법을 사용하라는 것이다.
매우 이지하다.
#include <stdio.h>
#include <stdlib.h>
int main(){
char *string;
int a,b;
string = malloc(sizeof(char)*100);
scanf("%s", string);
scanf("%d %d", &a, &b);
for(int i = a-1; i<=b-1; i++){
printf("%c", *(string+i));
}
return 0;
}
📒swap함수 만들기 (코드업, 1581)
이 문제는 조건들이 굉장히 많다. 그러므로 좀 더 자세히 보자.
조건이 되게 복잡하게 생긴 것 같은데 그냥 포인터랑 함수로 만들어보자. void로 만들어줘야 할 것 같다.
void myswap(int *a, int *b) {
int temp;
if (*a > * b) {
temp = *a;
*a = *b;
*b = temp;
}
}
쉬웠다.
📒(코드업, 1581)
이전에 풀었던 문제인데 포인터로 한 번 더 풀어보자. (malloc활용)
#include <stdio.h>
#include <stdlib.h>
int main(){
char *string = malloc(sizeof(char)*50);
scanf("%s", string);
printf("%s", string);
free(string);
return 0;
}
📒알파벳 찾기 (백준, 10809)
음 .................. 뭐 문자열은 arr (array)에 알파벳은 al(alphabet) 에 저장하면 될 것 같다.
#include <stdio.h>
#include <string.h>
int main() {
char arr[100];
char al[26];
char *ptrarr = arr;
char *ptral = al;
int x;
scanf("%s", arr);
for (int i = 0; i < 26; i++) {
*(ptrarr+i) = -1;
}
for (int i = 'a'; i <= 'z'; i++) {
for (int j = 0; j < strlen(arr); j++) {
if (*(ptrarr+j) == i) {
x = *(ptral + j) - 'a';
*(ptral+x) = j;
break;
}
}
}
for (int i = 0; i < 26; i++) {
printf("%d ", *(ptral+i));
}
return 0;
}
나름대로 쉬운 문제였다.
📒제로(백준, 19773)
딱 봐도 그냥 동적할당에 관한 문제이다. 무엇보다 동적할당은 메모리를 엄청 효율적으로 사용할 수 있어서 좋은 것 같다.
(그래서 linked list도 포인터로 주로 구현하는 것 같다.)
#include <stdio.h>
#include <stdlib.h>
int main(){
int hap = 0;
int size;
int start = 0;
scanf("%d", &size);
int *array = malloc(sizeof(int) * size);
for (int i = 0; i < size; i++){
int num;
scanf("%d", &num);
if (num != 0)
array[start++] = num;
else
start--;
}
for (int i = 0; i < start; i++){
hap += array[i];
}
printf("%d", hap);
free(array);
return 0;
}
📒끝, 후기
printf 함수에서는 변수 자체를 그냥 쓰지만 왜 scanf 함수에서는 &num 와 같은 형태로 메모리 주소를 알아내는지 궁금하다.
더욱 공부해보자.
'스터디 그룹 > ProjectH4C' 카테고리의 다른 글
ProjectH4C 2개월 4주차 과제 (코딩도장) (0) | 2021.03.14 |
---|---|
ProjectH4C 2개월 4주차 과제 (해커스쿨 ftz) (0) | 2021.03.12 |
ProjectH4C 2개월 3주차 과제 (UNIT36, 37, 38) (0) | 2021.03.07 |
ProjectH4C 2개월 3주차 과제 ( UNIT34, 35) (0) | 2021.03.03 |
ProjectH4C 2개월 2주차 과제 - 10문제 write-up (0) | 2021.02.26 |