C언어 멘토링 | 6주차 [과제] | 백준 2675번, 1157번

2022. 6. 1. 19:02·Programming Language/C
목차
  1. 문제1
  2. 풀이
  3. 문제2
  4. 풀이

문제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

 

백준(BOJ) 1157번 : 단어 공부

중부대 SCP 정보보안 동아리 신입 부원 C언어 멘토링 과제 문제 문제 알파벳 대소문자로 된 단어가 주...

blog.naver.com

 

출처 :&nbsp;https://blog.naver.com/ouwukwfy/220248439711

 


느낀 점 / 배운 점

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
  1. 문제1
  2. 풀이
  3. 문제2
  4. 풀이
'Programming Language/C' 카테고리의 다른 글
  • C 포인터(Pointer)
  • 백준 2480번 : 주사위 세개
  • C언어 멘토링 | 5주차 [과제]
  • C언어 멘토링 | 4주차 [과제]
602zzang
602zzang
  • 602zzang
    yks_STUDY
    602zzang
  • 전체
    오늘
    어제
    • 분류 전체보기 (77)
      • Programming Language (36)
        • C (15)
        • PYTHON (9)
        • RUST (12)
      • Reverse Engineering (3)
      • OS (17)
        • LINUX (17)
      • 보안 이슈 (6)
      • Digital Forensics (1)
      • CTF (8)
      • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    cyberdefenders
    python
    umassctf2025
    드림핵
    c
    bandit
    Rocky Linux
    P4C
    rustling
    보안동향
    rust
    소켓 통신
    빡공팟
    코드업
    백준
    picoCTF
    TeamH4C
    공급망
    보안이슈
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
602zzang
C언어 멘토링 | 6주차 [과제] | 백준 2675번, 1157번
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.