Level1 - -

 

 문제

문제 설명

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

제한 조건
  • n은 길이 10,000이하인 자연수입니다.
입출력 예
n return
3 "수박수"
4 "수박수박"

 

 풀이

사용언어 : C++

문자열 리터럴 결합하는 경우 에러가 발생 할 수 있다는걸 이번 풀이를 하면서 알게 되었다.

문자열 결합시에는 아래 처럼 insert나 append를 이용해서 문자열을 결합

	string str1 = "abcde";
	string str2 = str1.insert(2, "A");
	//abAcde 출력
    
    str1.append(추가 할 문자열)
    str1.append(추가 할 문자열, 문자수)
    str1.append(추가 할 문자열, 위치, 문자수)
    
	string str1 = "abcde";
	string str2 = str1.append("ABC");
	//abcdeABC 출력

 

 

#include <string>
#include <vector>

using namespace std;

string solution(int n) {
    string answer = "";
    
    for (int i = 1;i <= n; ++i){
        
        if ( i % 2 == 0 ){
            answer += "박";
        }
        else {
            answer += "수";
        }
    }
    return answer;
}

 

 

다른 사람의 풀이

&연산자를 이용한 풀이가 이전에 사용했던게 기억났다.

홀수는 이진수로 항상 1로 끝나게 된다.

&연산자는 같은 숫자를 &하면 같은 숫자가 나오게 된다.

1과 1일 경우 1을

0과 0일 경우 0이 된다.

 

이번 문제에서 홀수와 짝수를 구분해야 하는 상황에서

특정수 n과 1을 &해서 n이 짝수면 끝이 0으로 끝나게 되어 true가 아니게 되고

홀수면 끝이 1이 되어 1과 1을 &연산을 하게 되어 true가 되게 하는 방식이 된다.

#include <string>
#include <vector>

using namespace std;

string solution(int n) {
    string answer = "";

    for(int i = 0; i < n; i++)
        i & 1 ? answer += "박" : answer += "수";

    return answer;
}

 

 

 

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12922

+ Recent posts