Cos Pro 1급 모의고사 - 메모장 에 대한 C언어를 이용한 저의 풀이입니다.
목차
- 문제 설명
- 매개변수 설명
- return 값 설명
- 예제
- ***풀이 전략***
- 문제와 답
문제 설명
한 줄에 K자를 적을 수 있는 메모장에 영어 단어들을 적으려 합니다. 영어 단어는 정해진 순서로 적어야 하며, 단어와 단어 사이는 공백 하나로 구분합니다. 단, 한 줄의 끝에 단어 하나를 완전히 적지 못한다면, 그 줄의 나머지 부분을 모두 공백으로 채우고 다음 줄부터 다시 단어를 적습니다.
예를 들어 한 줄에 10자를 적을 수 있고, 주어진 단어가 순서대로 ["nice", "happy", "hello", "world", "hi"] 인 경우 각 줄에 다음과 같이 적을 수 있습니다.('_'는 공백을 나타냅니다.)
- 첫째 줄 : "nice_happy"
- 둘째 줄 : "hello_____"
- 셋째 줄 : "world_hi"
이때, 둘째 줄에 "hello"를 적으면 단어를 적을 수 있는 남은 칸은 5칸이며, "world"를 이어서 적으려면 공백 하나를 포함하여 총 6칸이 필요합니다. 따라서 단어가 잘리게 되므로 남은 칸을 모두 공백으로 채운 후, 다음 줄에 "world"부터 다시 단어를 적어 나갑니다.
한 줄에 적을 수 있는 글자 수 K와 적을 단어가 순서대로 담긴 배열 words, words의 길이 words_len이 매개변수로 주어질 때, 단어를 모두 적으면 몇 줄이 되는지 return 하도록 solution 함수를 완성해주세요.
매개변수 설명
한 줄에 적을 수 있는 글자 수 K와 적을 단어가 순서대로 담긴 배열 words, words의 길이 words_len이 solution 함수의 매개변수로 주어집니다.
- K는 5 이상 30 이하인 자연수입니다.
- words_len은 1 이상 100 이하입니다.
- words 배열에 담겨있는 모든 단어는 알파벳 소문자로만 이루어져 있으며, 각 단어의 길이는 K 이하입니다.
return 값 설명
단어를 모두 적으면 몇 줄이 되는지 return해주세요.
예제
K | words | words_len | return |
10 | ["nice", "happy", "hello", "world", "hi"] | 5 | 3 |
문제와 답
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
40
41
42
|
// 다음과 같이 include를 사용할 수 있습니다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// string header
#include <string.h>
int solution(int K, char* words[], int words_len) {
// 여기에 코드를 작성해주세요.
int answer = 0;
for (int i = 0; i < words_len; i++)
{ // 줄의 첫 단어 글자 수
int space = strlen(words[i]) + 1;
//printf("%s ",words[i]);
for (int j = i+1; j < words_len; j++)
{
// 새로 글자 수를 계산했을 때 K 개가 넘음?
if (space + strlen(words[j]) > K)
break;
else{ // 안넘으면 해당 단어 글자수 + 공백(1)을 더해준다.
//printf("%s ",words[j]);
space += (strlen(words[j]) + 1);
i += 1;
}
}
// 이번 줄을 다 채웠다면 줄 수를 더해준다.
answer++;
//printf("\n");
}
return answer;
}
// 아래는 테스트케이스 출력을 해보기 위한 main 함수입니다.
int main() {
int K = 10;
char* words[] = {"nice", "happy", "hello", "world", "hi"};
int words_len = 5;
int ret = solution(K, words, words_len);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
|
cs |
풀이 전략
글자를 세기가 귀찮아서 string.h을 사용했다.
메모장 규칙을 정리하면 다음과 같다.
- 한 줄에 K개 만큼 적을 수 있고
- 칸이 부족하면 다음 줄로 넘긴다.
- 단어 간에는 1개의 공백이 필요하다.
함수 구조
이중 반복문을 사용한다.
외부 반복문은 단어 배열을 모두 사용하고자,
내부 반복문은 한 줄을 판정하기 위해
다음과 같이 절차를 세웠다.
- 해당 줄에 단어 글자 수를 하나 넣어주고 다음 단어가 올 것을 기대하고 공백을 1개 넣어준다.
- 다음 단어를 붙여주는데(내부 반복문) 붙여줄 단어를 고려하여 한 줄이 넘으면 넘기고, 아니라면 계속 더한다.
- 해당 줄에 더하기가 끝나면 다음 줄로 넘어간다. (answer++)
'SW > CodingTest' 카테고리의 다른 글
CosPro1급 기출문제 - 1차 문제 10 - 0들을 0으로 만들기 (C언어) (1) | 2022.03.02 |
---|---|
CosPro1급 기출문제 - 1차 문제 6 - 체스의 나이트 (C언어) (0) | 2022.03.01 |
CosPro1급 모의고사 - Part.3 함수 작성 - 숫자 뽑기 (C언어) (0) | 2022.03.01 |
CosPro1급 모의고사 - Part.3 함수 작성 - 꽃피우기 (C언어) (0) | 2022.03.01 |
CosPro1급 모의고사 - Part.2 한 줄 바꾸기 - 카드셔플 (C언어) (0) | 2022.03.01 |