열 개씩 끊어 출력하기
Coding/PS

열 개씩 끊어 출력하기

https://www.acmicpc.net/problem/11721

 

11721번: 열 개씩 끊어 출력하기

첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.

www.acmicpc.net

문제

내용

알파벳 소문자와 대문자로만 이루어진, 길이가 N인 문자열이 주어진다.

이를 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어가 주어진다. 단어는 알파벳으로 구성돼 있으며 길이가 1에서 100사이다.

출력

입력으로 주어진 단어를 열 개씩 출력한다. 마지막 줄에는 10개 미만의 글자만 출력할 수 있다.

 

시도 1(오답)

접근

  • 입력에서 문자열 길이가 100 이하라고 주어졌다. 그렇다면 굳이 공간을 동적으로 할당할 필요없이 char[100]에 입력값을 담아 사용할 수 있을 것이라 생각했다.
  • 그후에 char배열에 한 요소씩 검사해가며 출력한다면 문제가 없으리라 생각했다.

실패

  • 한 요소씩 검사를 제대로 실행할 수 없었다. char[100]이라고 선언한 순간 쓰레기 값이 배열안에 들어가게 되는데, 이 값과 출력해야할 문자값을 구분하는 방법이 생각나지 않았다.
  • 구글링을 좀 해본다면 char배열로도 해결할 수 있으리라 생각이 들었지만 너무 비효율적인 방법이라 생각되었다.

 

시도 2(정답)

접근

  • 문자열을 동적으로 받아들일 수 있고, 자체적인 내장함수로 그 문자열에 접근할 수 있는 클래스가 필요했다. cpp에 있는 <string>이 제격이었다.
  • <string>의 reference는 이곳을 참고했다. 정리하면 다음과 같다.
    • import
      • #include <string>
      • using namespace std;
    • definition
      • string str;
      • string str("anything");
    • input
      • cin >> name; // 이 방법은 '\n'까지 입력받으므로 귀찮을 수 있다.
      • getline(cin, name, '\n'); // '\n'을 만날 때까지 키보드(cin)으로부터 문자열을 읽는다.
    • access
      • a.substr(2, 4);
      • a.at(2);
    • length
      • a.length();
      • a.size(); // length()와 동일

코드

#include <stdio.h>
#include <string>
#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {
	string str;
	
	getline(cin, str, '\n');
	
	for(int i = 0; i < str.length(); i++)
	{
		if(i%10 == 0 && i != 0) printf("\n");
		printf("%c", str.at(i));
	}
}

 

'Coding > PS' 카테고리의 다른 글

분해합  (0) 2019.07.05
카드의 합 구하기  (0) 2019.07.05
계단 오르기  (0) 2019.06.18
그대로 출력하기  (0) 2019.06.09
프로그래밍 대회를 위한 빠른 출력함수 정리  (0) 2019.06.01