Code Kata [문자열 다루기 기본, 행렬의 덧셈, 부족한 금액 계산하기, 문자열 내림차순으로 배치하기] | TIL 20th | 05/09/2026 (Sat)

2026. 5. 12. 10:20·TIL

Code Kata [문자열 다루기 기본, 행렬의 덧셈, 부족한 금액 계산하기, 문자열 내림차순으로 배치하기]

Code Kata

부족한 금액 계산하기, 문자열 내림차순으로 배치하기 : 이 두 문제는 쉬워서 GitHub에만 작성함.

  • 부족한 금액 계산하기 | Solved Date: 2026-05-09-Sat | Problem Link
  • 문자열 내림차순으로 배치하기 | Solved Date: 2026-05-09-Sat | Problem Link

행렬의 덧셈

037. 행렬의 덧셈| Solved Date: 2026-05-09-Sat | Problem Link

문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

입출력 예

[1,2],[2,3](https://www.notion.so/1,2],[2,3) [3,4],[5,6](https://www.notion.so/3,4],[5,6) [4,6],[7,9](https://www.notion.so/4,6],[7,9)
[1],[2](https://www.notion.so/1],[2) [3],[4](https://www.notion.so/3],[4) [4],[6](https://www.notion.so/4],[6)

arr1 arr2 return

기본 코드

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer;
    return answer;
}

힌트

  • 다중 배열 [i] [j]
  • 대입 해야한다. pushback() 아니다
  • vector<vector> answer = arr1; // 초기화

문제 풀이 과정

문제 나누기

  • {행렬 A1 + 행렬 B1 , 행렬 A2 + 행렬 B2}

정답 소스 코드

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer = arr1;

    for (int i = 0; i < arr1.size(); i++)
    {
        for (int j = 0; j < arr1[0].size(); j++)
        {

            answer[i][j] = (arr1[i][j] + arr2[i][j]);
        }

    }

    return answer;
}

Comments:

  • 처음에
  • 역시 다중 배열은 매번 헷갈린다*
  • 초기화 안하면 컴파일 에러생김. vector<vector> answer = arr1; // arr1과 같은 크기의 결과 행렬(answer)을 초기화

아래는 vscode에서 main 세팅해서 테스팅할때 사용한거

#include <iostream>

#include <string>
#include <vector>

using namespace std;

vector<vector<int>> solution(vector<vector<int>> arr1, vector<vector<int>> arr2) {
    vector<vector<int>> answer = arr1;

    for (int i = 0; i < arr1.size(); i++)
    {
        for (int j = 0; j < arr1[0].size(); j++)
        {

            answer[i][j] = (arr1[i][j] + arr2[i][j]);
        }

    }

    return answer;
}

int main()
{
    vector<int> arrA1{ 1,2 };
    vector<int> arrA2{ 2,3 };

    vector<vector<int>> arr1{ arrA1,arrA2};

    vector<int> arrB1{ 3,4 };
    vector<int> arrB2{ 5,6 };

    vector<vector<int>> arr2{ arrB1,arrB2 };

    //cout << "A1: " << arrA1[0] << endl;
    //cout << "arr1: " << arr1[0][0] << endl;
    //cout << "ar2: " << arr2[0][0] << endl;

    solution(arr1,arr2);

    return 0;
}

문자열 다루기 기본

036. 문자열 다루기 기본 | Solved Date: 2026-05-09-Sat | Problem Link

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
  • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

입출력 예

"a234" false
"1234" true

s return

기본 코드

#include <string>
#include <vector>

using namespace std;

bool solution(string s) {
    bool answer = true;
    return answer;
}

힌트

  • #include <cctype>
  • isdigit()
  • 문자열 s의 길이가 4 혹은 6

정답 소스 코드

#include <string>
#include <vector>
#include <cctype>

using namespace std;

bool solution(string s) {

    if (s.length() != 4 && s.length() != 6)
    {
        return false;
    }

    for (int i = 0; i < s.length(); i++)
    {

        if (!isdigit(s[i])) {
            return false;
        }
    }

    return true;
}

Comments:

이번문제는 문자열로 변형 하는 법 몰라서 그냥 바로 검색해서 찾아봄

  • 처음에 stoi 가 맞는 줄 알았는데 문제가, stoi 는 중간이나 뒤쪽에 문자열이 들어갈경우 제대로된 답이 안나옴
  • 결국 #include<cctype> 안에 있는 isdigit() 을 사용하는 게 맞았다.
  • 또한 '문자열 s의 길이가 4 혹은 6' 를 검사 안하고 그냥하니 역시 오류뜸. 어떨때는 저런 자세한 사항을 안맞춰도 될때가 있어서 귀찮으니깐 스킵할 때가 있는데 앞으로 조심자.

isdigit()

C++의 isdigit()은 문자가 10진수 숫자('0'-'9')인지 판별하는 함수로, <cctype> 헤더에 정의되어 있습니다. 숫자인 경우 0이 아닌 값(true)을, 아니면 0(false)을 반환하며, 주로 문자열 내 숫자 검사나 입력 데이터 검증에 활용됩니다

  • 헤더: #include <cctype>
  • 함수 원형: int isdigit(int c);
  • 기능: 매개변수로 전달된 문자가 '0'부터 '9' 사이의 숫자인지 확인
  • 반환값:
    • 0이 아닌 값 (True): 문자가 숫자('0'-'9')일 때
    • 0 (False): 문자가 숫자가 아닐 때
  • 특징: 아스키 코드 값 기준으로 '0' (48) ~ '9' (57)를 판별

주의사항 및 팁

  • 매개변수: char 타입을 전달해도 되지만, 함수 원형은 int 타입을 받습니다.
  • 문자열 검사: isdigit()은 문자 하나(char)만 검사합니다. 문자열(std::string) 전체를 검사하려면 루프(for, while)를 사용하여 각 문자를 검사해야 합니다.
  • 범위: 오직 10진수 숫자 '0'-'9'만 true를 반환함함

아래는 stoi 찾아보면서 나온 정보.

If-Else vs Try-catch

  • 여기서 if else 는 오류 상황에서 실행이 안되기 때문에 try-catch 사용해야 한다
  • C++에서 if-else는 정상 흐름 내에서 조건을 검사하여 분기하는 논리 제어문이고, try-catch는 예외적인 상황(오류)을 처리하여 프로그램의 비정상 종료를 막는 예외 처리 구조다. if-else는 일반적인 상황에, try-catch는 예외(Exception) 발생 시 사용.
try {
    // 예외가 발생할 가능성이 있는 코드
    if (/* 오류 상황 */) {
        throw /* 예외 객체/값 */; // 예외 발생 시 catch로 점프
    }
} catch (/* 예외 자료형 */ e) {
    // 예외 처리 코드
}

핵심 차이점 요약

  • 용도: if-else는 일반적인 조건 분기(예: 짝수/홀수), try-catch는 파일 미존재, 메모리 부족 등 비정상 상황 처리.
  • 작동 방식: try-catch는 예외 발생 시 즉시 코드 블록을 종료하고 catch로 제어 이동. if-else는 해당 블록만 수행.
  • 성능: if-else가 일반적으로 try-catch보다 빠르며, try-catch는 예외 발생 시 성능 저하가 발생할 수 있습니다.
  • 스코프(Scope): try 블록 내에서 선언된 변수는 catch에서 접근할 수 없습니다.

stoi

  • std::stoi: String to int
  • std::stol: String to long
  • std::stoll: String to long long
  • std::stoul: String to unsigned long
  • std::stof: String to float
  • std::stod: String to double

잘못된 사용

#include <string>
#include <vector>

using namespace std;

bool solution(string s)
{
    try {
        stoi(s);
    } catch (...) {
        return false;
    }
    return true;

}

틀린 이유

  • stoi("1234"): (1234) 로 변환 성공.
  • stoi("123a"): 앞의 123만 숫자로 변환하고 나머지를 무시하여 (123)으로 변환 성공. (이것이 예외를 발생시키지 않아 try-catch에서 걸러지지 않습니다.)
  • stoi("a123"): 첫 글자가 숫자가 아니므로 예외 발생.
  • 제한 사항: 문자열은 영문 알파벳을 포함할 수 있으므로, "123a" 같은 케이스는 숫자로만 구성되어야 한다는 조건을 만족하지 않습니다
저작자표시 동일조건 (새창열림)
'TIL' 카테고리의 다른 글
  • 코드 카타 (Code Kata) : 명예의 전당, 2016 | 달력 문제 정리 | TIL 28th | 05/31/2026 (Sun)
  • 필기시험 개념 공부 | Code Kata [크기가 작은 부분문자열, 최소직사각형] | TIL 23th | 캠프 17일 차 | 05/14/2026 (Thur)
  • 필기시험 B part 2 & 3 | Code Kata: 삼총사 | TIL 22th | 캠프 16일 차 | 05/13/2026 (Wed)
  • 2025 게임 프로그래밍 전문가 국가기술 자격검정 필기시험 B, Part1 풀이 & 해석 | Code Kata: 이상한 문자 만들기 | TIL 21th | 캠프 15일 차 | 05/12/2026 (Tue)
DevCol
DevCol
DevCol (Development Collaboration). 함께 개발 & 공부 & IT 정보 나눔장소
  • DevCol
    DevCol (Development Collaboration)
    DevCol
  • 블로그 메뉴

    • Unreal Engine
    • TIL
    • 게임국가기술자격검정 게임프로그래밍전문가 [한국콘텐츠진흥원]
    • 분류 전체보기 (73) N
      • Unreal Engine (31) N
        • Project (2) N
        • Dev Log (0)
        • Debugging (2) N
        • Blueprint (1)
        • UE 기초 (25) N
        • UE 심화 (0)
        • TA (1) N
      • Programming Language (0)
        • C++ (0)
        • C# (0)
      • Unity Engine (0)
      • 자격증 (3)
        • 게임국가기술자격검정 [한국콘텐츠진흥원] (3)
      • Coding Test | 코딩테스트 (0)
        • 프로그래머스 기초 (0)
        • 프로그래머스 입문 (0)
      • TIL (38) N
        • Boot Camp (32) N
      • Git & Github (1)
  • 링크

    • Youtube
    • GitHub
    • itch.io
    • Blog (En)
  • 공지사항

  • 인기 글

  • 태그

    Game Dev
    c
    프로그래밍
    til
    기초
    내일배움캠프
    게임개발
    UE5
    코드카타
    cpp
    Unreal engine
    Code Kata
    Devlog
    Programming
    게임 개발
    Boot Camp
    C++
    언리얼 엔진
    UE
    코드 카타
  • 최근 글

  • GitHub Youtube itch
  • hELLO · Designed By 정상우.v4.10.6
  • DevCol
    Code Kata [문자열 다루기 기본, 행렬의 덧셈, 부족한 금액 계산하기, 문자열 내림차순으로 배치하기] | TIL 20th | 05/09/2026 (Sat)
    상단으로

    티스토리툴바