백준 : 세로읽기
를 푸는 도중 발생한 의문을 정리한 글이다.
https://www.acmicpc.net/problem/10798
문제는 그냥 단순하게 가로로 작성할 5줄의 글을 세로로 읽어서 출력하면 되는 문제다.
나는 문제의 조건에서 준 길이(15)와 관계없이, 가장 긴 문장을 기준으로만 순회할 생각이었다.
그러기 위해서 max함수를 활용했는데, 타입에러가 났다...ㅜ
c:\Users\leath\pracAlgo2\10798 세로읽기.cpp:15:24: note: mismatched types 'std::initializer_list<_Tp>' and 'int'
15 | maxLength = max(maxLength, str[i].size());
|
- string::size()의 반환 타입은 size_t
maxLength = max(maxLength, str[i].size());
그렇다.
위 코드에서 str[i].size()는 size_t를 반환한다.
그럼 size_t가 뭐냐..
size_t는 부호 없는 정수(unsigned integer) 타입이며, 보통 unsigned long 또는 unsigned long long 타입이다.
그럼 unsigned integer은 뭐냐...
부호 없는 정수 (unsigned integer)란?
컴퓨터에서 정수(integer)는 보통 부호 있는 정수(signed integer) 와 부호 없는 정수(unsigned integer) 두 가지로 나뉜다.
부호 있는 정수 (signed int)
- int는 보통 부호 있는 정수
- 즉, 양수와 음수를 모두 표현할 수 있다.
- 예를 들어, int가 4바이트(32비트)라면, 값의 범위 다음과 같다.
-2,147,483,648 ~ 2,147,483,647
부호 없는 정수 (unsigned int)
- unsigned int는 음수를 표현할 수 없다.
- 대신, 같은 크기의 메모리에서 더 큰 양수 범위를 표현할 수 있다.
- 예를 들어, unsigned int가 4바이트(32비트)라면, 값의 범위는 다음과 같다.
0 ~ 4,294,967,295
왜 size_t는 unsigned일까? 이거 왜 만든걸까?!
size_t는 배열의 크기나 메모리 크기를 표현하는 데 사용되는 타입이다.
근데 크기는 절대 음수가 될 수 없잖아?
그래서 C++에서는 size_t를 부호 없는 정수 (unsigned integer) 로 정의한것이다!!
결론
이 문제를 해결하기 위해서는, 강제 타입 변환을 해주면 된다 ㅎㅎ
아래의 코드를 참고하자!
#include <bits/stdc++.h>
using namespace std;
int main()
{
cin.tie(0), cout.tie(0);
ios::sync_with_stdio(0);
vector<string> str(5);
int maxLength = -1;
for (int i = 0; i < 5; i++)
{
cin >> str[i];
// cout << str[i].size();
maxLength = max(maxLength, (int)str[i].size());
}
for (int i = 0; i < maxLength; i++)
{
/* code */
for (int j = 0; j < 5; j++)
{
if (i < str[j].size())
{
cout << str[j][i];
}
}
}
}
끗!
728x90
'C++이당' 카테고리의 다른 글
[C++] 자주 쓰는 자료구조 & STL 컨테이너 아카이브! (1) | 2025.04.05 |
---|---|
C++ 기본 문법 시작하기 (0) | 2023.07.25 |