[백준] 2675, 문자열 반복, char -> string 형 변환

YUN·2026년 2월 20일

C++

목록 보기
34/85


처음에 어떻게 풀지 막막했었는데 어찌저찌 풀긴 풀었다.

1. 나의 풀이

#include <iostream>
#include <string>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int T,a;
    string s;
    
    cin >> T;
    while(T--) {
        string total="";
        cin >> a >> s;
        for(char c : s) {
            for(int i=0;i<a;i++) {
                total+=c;
            }
        }
        cout << total << "\n";
    }
    return 0;
}

우선, 테스트 케이스 수, 반복 횟수, 문자열을 입력받는다.

이후 문자열의 각 인덱스에 해당하는 문자에 대하여 입력받은 횟수 만큼 반복을 수행하고 total에 +로 문자열을 이어붙인다.

이렇게 반복이 완료된 문자열을 완성시킨다음 문자열을 출력한다.

2. 다른 풀이 1

#include <iostream>

using namespace std;


int main() {

	int t, R;
	string s;

	cin >> t;

	while (t--) {
		cin >> R >> s;

		for (int i = 0; i < s.length(); i++) {
			for (int k = 0; k < R; k++) {
				cout << s[i];
			}
		}
		cout << '\n';
	}



	return 0;
}

우선 한 눈에 봐도 코드 길이도 짧고 깔끔하다.

위 코드의 경우 전체적인 흐름 자체는 비슷하나 세부적인 흐름이 나의 코드와 다르다.

위의 코드는 문자열을 완성시키고 출력하는게 아니라, 문자 하나 하나를 입력횟수 만큼 반복해서 출력 한다.

다시말해 나는 반복이 완료된 문자열을 완성시킨다음에 출력했지만, 위의 풀이는 그냥 각 문자를 바로바로 반복해서 출력한다.

내 코드는 굳이 불필요한 문자열을 하나 더 만들어서 풀었기에 위의 코드보다 나쁜(?) 코드라는 생각이든다.

3. 느낀 점 (배운 점)

(1) char -> string 형 변환

s.push_back(c)

s.push_back(c) 

하면 string인 s의 마지막에 char인 c를 갖다붙여준다.

s1 + c1

s1 + c1

하면 s1뒤에 c1을 갖다붙인 string을 반환한다.

문제를 푸는 과정에서 char를 어떻게 string으로 형 변환하지에 대한 고민이 있었는데 이 문제를 풀며 배울 수 있었다.

(2) while(t--) 는 조심히 쓰자

얼마전 다른 문제를 풀다가 while(t--) 로 반복하는 스타일이 마음에 들었어서 이렇게 코딩해봤는데 실수를 했다.

while(t--) 방식은 반복문을 중첩하는 경우 사용하면 안된다.

t--t의 값을 실제로 1씩 감소시키기 때문에 중첩 반복문에서 내부의 반복문으로 쓰일 경우 오류를 유발하게된다.

앞으로는 중첩 반복문은 앵간하면 for문으로 구현해야겠다.

(3) for(char c : s)

for(char c : s) 이 반복문 스타일도 다른 사람의 코드를 보고 마음에 들어서 이번에 써봤는데 문자열이든,

배열이든 첫 인덱스부터 자동으로 내가 원하는 변수에 반복적으로 대입해주는 기능이 매우 편하고 좋은 것 같다.

이 스타일을 앞으로 자주 사용해야겠다.

(4) 문자열의 길이 확인 : s.size(), s.length()

문자열의 길이를 확인하는 함수는 2가지이다. s.size(), s.length() 이다.

둘 중 어느것을 쓰든 상관없다.

나는 뭔가 s.size()에 애착이간다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글