컴과의 빛이라는 교수님이 오셔서 너희의 수준을 알고싶구나!하며 어렵다는 21프논이 기말을 풀게 하셨다
연구년동안 흑화하셔서 사실 더이상 빛이 아닌건가 라는 생각을 하게 되었다
타 분반 교수님은 1학기때 배운 내용 복습도 했다는데 우린 그런게 없었다
첫날에 기억이 1도 안나서 걍 울고싶었다
이것은 21학년도 기말문제 마지막문제이다
다 푼 사람이 손에 꼽을 정도로 어려운 문제이다
문제 복붙을 하면 글자가 깨져서 사진으로 가져왔다
접은글로 문제 타이핑한것도 넣어놓겠다(복붙하면 글자가 깨져서 손으로 직접 한거라 오타가 많다)
크기가 20미만인 문자열(input)에 크키가 20미만인 암호(passward)가 숨어있는가를 판별하는 함수 isHIddenPassward를 작성하려고 한다.passward가 input안에 순서대로 나타나면 1아니면 0을 반환한다.
이떄 input에는 다른 문자들이 섞여있어도 된다.
예를 들어서 passward가 apple일떄 input이 abpple이면 암호가 숨겨진 것으로 간주한다
또한 input이 bappxle이거나 capple일떄도 역시 암호가 숨겨진 것으로 간주한다.
반면에 appld,appel은 숨겨진 암호가 아니다
암호를 읽어드린 후 입력되는 3개의 input에 대해 숨겨진 암호 여부에 따라 0(아닌경우) 혹은 1(맞는경우)를 출력한다
주어진 main을 변경하지 말고 아래와 같은 실행예를 갖도록 함수 isHiddenPassward를 작성하여 이를 제출한다
실행예 1
apple <- 입력:암호
abpple apple appld <- 입력: 3 개의 input
110 <- abpple, apple 은 숨겨진 암호이고 appld는 아니다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>//변경금지
int isHiddenPassword(char passwd[], char input[])
{
// 코드작성
}
int main(void) //변경금지
{
char passwd[20], input[20];
int i;
scanf("%s", passwd);
for (i = 0; i < 3; i++) {
scanf("%s", input);
if (isHiddenPassword(passwd, input))
printf("1");
else
printf("0");
}
printf("\n");
}
내가 생각한 이 문제의 핵심 알고리즘은 다음과 같다
키워드의 0번 문자열을 인풋의 0부터 끝까지와 비교
일치하는 문자열이 있다면 패스워드의 1번 문자열을 일치하는 문자열의 다음 문자열~끝까지 비교
일치하는 문자열이 없다면 False값(0) 반환
아래가 작동하는 코드이다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int isHiddenPassword(char passwd[], char input[]) // 이 함수를 제출
{// 코드작성
int passwd_length = 0;
int input_length = 0;
while (passwd[passwd_length] != '\0')
{
passwd_length++;
}
while (input[input_length] != '\0') {
input_length++;
}
int passwd_index = 0;
for(int i=0;i<input_length;i++)
if (passwd[passwd_index] == input[i])
{
passwd_index++;//현재까지 일치한 암호 문자의 개수를 나타냄
if (passwd_index == passwd_length)
return 1;
}
return 0;
}
int main(void) //변경금지
{
char passwd[20], input[20];
int i;
scanf("%s", passwd);
for (i = 0; i < 3; i++) {
scanf("%s", input);
if (isHiddenPassword(passwd, input))
printf("1");
else
printf("0");
}
printf("\n");
}
|
cs |
어려운 문제라 문제를 풀떄 연습장에 써가며 풀었다
연습장에 생각을 어떻게 했는지 연습장에 쓴 내용을 가져왔다
'대학교 1-2 > 컴프' 카테고리의 다른 글
21 프논이 기말 4번째 문제_2 (0) | 2023.09.11 |
---|---|
21 프논이 기말 4번째문제_1 (0) | 2023.09.11 |
HW1_2 (0) | 2023.09.09 |
HW1_1 (0) | 2023.09.09 |
LAB1_2 (0) | 2023.09.09 |