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;
}