문제1
백준 2675번
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.
QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.
입력 : 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.
출력 : 각 테스트 케이스에 대해 P를 출력한다.
출력 결과 예시
풀이
#include <stdio.h>
#include <string.h>
int main() {
int R = 0, T = 0; //R은 입력받을 정수, T는 테스트 케이스의 개수
char S[21]; //입력받을 문자열
scanf("%d", &T); //테스트 케이스 입력 받기
for (int t = 0; t < T; t++) { //테스트 케이스 개수만큼 입력 받고 출력
scanf("%d %s", &R, S);
for (int i = 0; i < strlen(S); i++) { //문자열 개수만큼 반복
for (int j = 0; j < R; j++) { //R에 입력된 정수만큼 반복
printf("%c", S[i]);//문자 하나씩 출력
}
}
printf("\n"); // 띄워줘야 됨 (예제를 통해 알 수 있다.)
}
}
문제2
백준 1157번
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력 : 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력 : 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
출력 결과 예시
풀이
#include <stdio.h>
#include <string.h>
char word[1000001]; //입력받을 문자열
int alphabet[27] = { 0, }; //알파벳 등장 횟수 저장
int max = 0, len; //max는 최댓값, len은 word의 길이 저장
int charactor = 0, same = 0;
int main() {
scanf("%s", word); //단어 입력받기
len = strlen(word); //strlen을 계속 쓰면 시간이 오래 걸리기 때문에 len 변수에 저장
for (int i = 0; i <= len; i++) {
//대문자든 소문자든 alphabet배열에 a는 0번지, b는 1번지에 횟수 저장
if (word[i] <= 90) {
alphabet[word[i] - 65] += 1;
}
else {
alphabet[word[i] - 97] += 1;
}
}
for (int i = 0; i <= 26; i++) {
if (alphabet[i] > max) { //가장 큰 수 max에 저장
max = alphabet[i];
charactor = i + 1; //나중에 문자를 출력하기 위해 저장 (A=65)
}
else if (alphabet[i] == max) { //가장 큰 수와 같은 값을 발견하면 same에 그 값을 저장
same = alphabet[i];
}
}
if (same == max) { //same과 max값이 같다면 ? 출력
printf("?");
}
else { // 유일하다면 대문자로 변환하여 출력
printf("%c", charactor + 64);
}
}
참고 : https://m.blog.naver.com/nms200299/222391935962
느낀 점 / 배운 점
1. 문제를 잘 읽자
2. 제한 시간을 고려해 효율적인 코드 작성
1157번 문제의 경우 처음에 먼저 대문자로 바꾸고 그걸 또 다른 리스트에 저장하고 이런 식으로
매우 비효율적으로 코드를 작성하니 시간 초과 문제가 발생하였다...
문제 접근을 다르게 했어야 해서 선배님 코드를 참고하여 다시 작성하였다.
strlen은 문자열 하나하나를 검사를 하는 것이기 때문에 그 만큼 시간이 오래 걸린다.
따라서 여러번 써야할 때에는 변수에 저장하는 것이 시간 단축에 도움이 된다.
'Programming Language > C' 카테고리의 다른 글
C 포인터(Pointer) (1) | 2023.06.07 |
---|---|
백준 2480번 : 주사위 세개 (0) | 2022.06.23 |
C언어 멘토링 | 5주차 [과제] (0) | 2022.05.16 |
C언어 멘토링 | 4주차 [과제] (0) | 2022.05.07 |
C언어 멘토링 | 3주차 [과제] (0) | 2022.05.03 |