공부기록/C, C++
[BOJ] 기타 입출력 문제 C++
lecor
2020. 10. 24. 23:48
저번주엔 입출력 문제 중 A+B 를 풀었고, 이번주엔 남은 입출력 문제들을 마저 해결했다.
11718번 그대로 출력하기
📝문제 링크 : https://acmicpc.net/problem/11718
#include <iostream>
#include <string>
int main(void)
{
std::string s;
while (1)
{
getline(std::cin, s);
if (s == "")
break;
std::cout << s << std::endl;
}
return 0;
}
공백이 포함 될 수 있기 때문에 cin으로 해결할 수 없다.
<string>에 정의된 getline() 함수를 써야한다고 함.
- getline 함수는 입력 스트림에서 문자들을 읽어서, 인자로 받은 문자열에 저장합니다.
- std::istream& getline(std::istream& input, std::string& str, char delim)
- input : 문자들을 읽어들일 스트림
- str : 입력받은 문자열을 저장할 문자열 변수
- delim : 구분 문자. 이 문자가 나타나기 전까지 읽어들인다. (생략가능)
- 한 가지 주의할 사항은, 입력 방식 중에 공백문자(delimiter)를 스트림에 남겨놓는 입력방식 뒤에 getline 을 바로 호출하게 된다면, getline 은 해당 공백문자를 읽고 바로 읽기를 종료하게 된다.
- 문자열의 byte 크기를 리턴하는 <string>의 .size()를 이용해서 짠 코드도 있었다.
- 제출하고 나서 맞은 사람들의 코드를 보니 <unistd>의 read()함수를 사용하기도 하고 각양각색이었다.
11719 그대로 출력하기 2
📝문제 링크 : https://acmicpc.net/problem/11719
#include <iostream>
#include <string>
int main()
{
string s;
while (getline(cin, s))
cout << s << '\n';
return 0;
}
- 입력으로 빈 줄이 주어질수도 있다는 점이 1번 문제와 다르다.
11720번 숫자의 합
📝문제 링크 : https://acmicpc.net/problem/11720
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i, N, sum;
string s;
sum = 0;
cin >> N >> s;
for (i = 0; i < N; i++)
{
sum += s[i] - '0';
}
cout << sum << endl;
return 0;
}
- 처음에 시도했다가 실패한 방법
cin >> N;
getline(cin, s);
첫번재 문제에 써놨던 주의사항에 바로 걸렸다. cin은 개행을 스트림에 남겨놓는다.
한 가지 주의할 사항은, 입력 방식 중에 공백문자(delimiter)를 스트림에 남겨놓는 입력방식 뒤에 getline 을 바로 호출하게 된다면, getline 은 해당 공백문자를 읽고 바로 읽기를 종료하게 됩니다.
👆이럴 땐 cin.get() 이나 getchar()로 버퍼를 비우고 해도 된다.
하지만 cin >> N >> s; 이렇게 쓰는게 더 간편해보여서 이 방법을 썼다.
1924번 2007년
📝문제 링크 : https://acmicpc.net/problem/1924
#include <iostream>
using namespace std;
int getNumberOfDays(int month)
{
int days;
if (month < 8)
{
if (month == 2)
days = 28;
else if (month % 2)
days = 31;
else
days = 30;
}
else
{
if (month % 2)
days = 30;
else
days = 31;
}
return days;
}
int main()
{
int month, date;
int i, days;
string dayOfWeek[7] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
cin >> month >> date;
i = 1;
days = 0;
while (i != month && month != 1)
{
days += getNumberOfDays(i);
i++;
}
days += date;
cout << dayOfWeek[(days % 7)] << '\n';
return 0;
}
getNumberOfDays 함수에 month를 넘겨서 해당 월의 날짜수를 반환하는 방법 사용.
그리고 별찍기 문제도 끝냈지만 포스팅엔 생략. 별찍기는 기본 단계를 해결하면 복잡한 그림도 기본문제를 조합해서 하면 돼서 쉬웠다.
참고