C언어:4일차 (문자열~

이미리·2021년 8월 16일
0

boj_Algorithm

목록 보기
5/25

10809번 알파벳 찾기

내 아이디어:
1. 아스키코드 이용
a의 아스키코드는 97이다. 이후의 소문자들은 ++해주면 된다.
2. 아스키코드에서 a값인 97을 빼주면 a=0, b=1 ...이 된다.

*이때 strlen을 사용할 것인데 (int)로 형 변환을 해주어야 한다

tlqkf 또 scanf문제다. 이번에는 설정을 바꾸는 대신
#define _CRT_SECURE_NO_WARNINGS을 쓰기로 햇다.
이제 잘 돌아간다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main() {
	int place;
	char arr[101];
	int alpha[27] = { 0, };
	for (int i = 0; i < 27; i++) {
		alpha[i] = -1;
	}
	
	scanf("%s", arr);
	int len = (int)strlen(arr);
	
	for (int j = 0; j <=len; j++) {
		
		place=arr[j]-97;
		alpha[place] = j;
	}
	
	for (int m = 0; m < 27; m++) {
		printf("%d ", alpha[m]);
	}
	return 0;
}

-1만 프린트 된다. 뭐가 문제야!!!
ㅠㅠ다시 생각해보자...
alpha의 경우 a-z를 알려줘야하기 때문에 26까지 프린트 되는게 맞다...
그럼 어디서 틀린고지

아 또 빼먹은 설정이 있었다. 중복값을 처리해줘야 된다는 것 .. 어우 머리아파
중복을 어떻게 거르지

마지막 결과를 프린트하는 for문을 while문으로 고쳤더니 돌아간다!!

또한 중복을 걸러내는 for문을 짰따.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main() {
	int place;
	char arr[101];
	scanf("%s", arr);
	int len = (int)strlen(arr);
	//printf("%s %d\n\n", arr, len);
	int alpha[27] = { 0, };
	for (int i = 0; i < 27; i++) {
		alpha[i] = -1;
	}
	
	for (int j = 0; j < len; j++) {
		place=arr[j]-97;
		if (alpha[place] == -1) {
			alpha[place] = j;
		}
	}
	int n = 0;
	while (n != 27) {
		printf("%d ", alpha[n]);
		n++;
	}

	return 0;
}

틀렸습니다.가 나오는데 또 어디서 틀렸다는거니... sibal

와 졸라 뿌듯하다.
문제점을 찾아서 해결햇다!!!! 답지 없이!!!!!!!!!!!!!!
알파벳은 26글자인데.. 내가 27자까지 나오게 해놓아서 z이후에도 -1이 하나 더 생성되고 있었다.

전체를 수정해줄 필요 없이 while문의 조건을 n!=26으로 고쳐주었더니 성공!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main() {
	int place;
	char arr[101];
	scanf("%s", arr);
	int len = (int)strlen(arr);
	//printf("%s %d\n\n", arr, len);
	int alpha[27] = { 0, };
	for (int i = 0; i < 27; i++) {
		alpha[i] = -1;
	}
	
	for (int j = 0; j < len; j++) {
		place=arr[j]-97;
		if (alpha[place] == -1) {
			alpha[place] = j;
		}
	}
	int n = 0;
	while (n != 26) {
		printf("%d ", alpha[n],n);
		n++;
	}

	return 0;
}

하지만 내 코드는 반복문을 너무 남발햇당...다른 사람들이 작성한 코드를 보면 if를 이용해서 반복문없이 잘 했다 omg 나도 연습해야지..


2675번 문자열 반복

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main() {
	int T, R, leng;
	char S[21];

	scanf("%d", &T);
	
	for (int t = 0; t < T; t++) {
		scanf("%d", &R);
		scanf("%s", S);
		leng = (int)strlen(S);
		for (int i = 0; i < leng; i++) {
			for (int j = 0; j < R; j++) {
				printf("%c", S[i]);
			}
		}
	}

	return 0;
}

이중for문을 사용해 반복해주었다.
틀렸다!
왜??!!

ㅇr... 개허무하다.
엔터하나때문에...
다음 테스트케이스로 넘어갈때 \n을 추가해주었더니 성공했다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main() {
	int T, R, leng;
	char S[21];

	scanf("%d", &T);
	
	for (int t = 0; t < T; t++) {
		scanf("%d", &R);
		scanf("%s", S);
		leng = (int)strlen(S);
		for (int i = 0; i < leng; i++) {
			for (int j = 0; j < R; j++) {
				printf("%c", S[i]);
			}	
		}
        printf("\n"); // 이거때문에...ㅋㅋ
	}

	return 0;
}

0개의 댓글

관련 채용 정보