반응형
#27866번 : 문자와 문자열
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* words;
words = (char*)malloc(1000 * sizeof(char));
if (words == NULL)
{
printf("메모리 할당 오류");
exit(1);
}
scanf("%s", words);
int i;
scanf("%d", &i);
printf("%c", words[i - 1]);
return 0;
}
|
cs |
이 문제 두번이나 런타임 오류 (double free) 오류가 발생했다.
마지막에 return 앞에 동적메모리 해제하려고 free함수를 썻는데 double free라고 한다.. 왜그런지 열심히 찾아봤는데도 모르겠음..~
#2743번 : 단어 길이 재기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char words[100];
scanf("%s", words);
int count = 0;
for (int i = 0; i < 100; i++)
{
if (words[i] != NULL)
count++;
else
break;
}
printf("%d", count);
return 0;
}
|
cs |
strlen 사용해서 하면 한줄이면 끝나긴 할텐데 그냥 for문 사용해서 풀어보았다.
배열의 마지막 값이 나올 때까지 count값을 증가시켜 문자열의 길이를 계산했다.
#9086번 : 문자열
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int T;
scanf("%d", &T);
char words[10][1000];
for (int i = 0; i < T; i++)
{
scanf("%s", words[i]);
}
for (int i = 0; i < T; i++)
{
printf("%c%c\n", words[i][0], words[i][strlen(words[i]) - 1]);
}
return 0;
}
|
cs |
2차원 배열 사용해서 여러개의 문자열을 받은 후에 각 문자열의 첫글자랑 마지막글자를 출력했다.
대충 이런 느낌.. 저 한칸에 들어가는 문자열은 1000글자까지 들어가는 것임.
#11654번 : 아스키 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char c;
scanf("%c", &c);
printf("%d", c);
return 0;
}
|
cs |
#11720번 : 숫자의 합
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int N;
char words[100];
scanf("%d", &N);
scanf("%s", words);
int hap = 0;
for (int i = 0; i < N; i++)
{
hap += words[i] - '0';
}
printf("%d", hap);
return 0;
}
|
cs |
문자열에 숫자를 저장할 때 int로 저장한게 아니라 char로 넣었기 때문에 그냥 합을 계산하면 아스키코드값이 계산된다.
그래서 0의 아스키 코드값 48을 빼서 실제 숫자값과 동일하게 계산하도록 for문을 작성한다.
#10809번 : 알파벳 찾기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char str[100];
int alp[26];
scanf("%s", str);
for (int i = 0; i < 26; i++)
{
alp[i] = -1;
}
for (int i = 0; i < strlen(str); i++)
{
if (alp[str[i] - 'a'] == -1)
{
alp[str[i] - 'a'] = i;
}
}
for (int i = 0; i < 26; i++)
{
printf("%d ", alp[i]);
}
return 0;
}
|
cs |
먼저 알파벳이 26개니까 크기가 26인 배열을 만들고 모든 값에 -1을 입력해둔다.
현재 문자에서 알파벳 'a'의 아스키 코드값을 빼서 alp의 인덱스 값을 계산하고 i값을 alp에 대입한다.
이때 for문을 사용해서 문자가 시작하는 곳을 찾을 건데 맨 처음에 나온 위치를 입력해야되기 때문에 중복을 막아야한다.
==> if문을 사용해서 alp배열의 값이 -1일 때만 변경하도록 한다.
반응형
'코딩해요 > C' 카테고리의 다른 글
[백준/C언어] 2차원 배열 문제풀이 (0) | 2023.08.28 |
---|---|
[백준/C언어] 심화1 문제풀이 (0) | 2023.08.22 |
[백준/C언어] 1차원 배열 1546번 : 평균 (0) | 2023.08.08 |
[백준/C언어] 입출력과 사칙연산 문제풀이 (0) | 2023.08.01 |
[백준/C언어] 1차원 배열 문제풀이(2) (0) | 2023.08.01 |