인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Hyungjune Choi님의 프로필 이미지

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

따닥따닥 붙어있는것 입력(교안, 23page)

작성

·

211

0

입력을

4 4

1000

0000

0111

0000

로 하면,

 

cin >> n >> m;

for(int i = 0; i <n ; i++){

cin >> s;

}

 

로 알려주셨는데.. 이게 어떻게 저걸 받아들이는건가요?

앞에

int n,m;

string s;

가 있다고 해도 너무 이상해서요..

 

그리고 뒤에 scanf로 받는거랑 둘중 뭐가 더 좋다 안좋다는 없을까요? (그전에는 뭐가 이왕이면 더 좋다는식으로 써주셧길래 문의드려요)

답변 2

0

Hyungjune Choi님의 프로필 이미지

정말 감사합니다! :)

 

'0' 을 배는 이유는 아스키코드표의 0이 0x80 이니 그만큼을 빼서 진짜 숫자 0으로 만들어 주시는거군요

 

취미쟁이에게 너무 좋은 강의입니다 감사합니다!

큰돌님의 프로필 이미지
큰돌
지식공유자

맞습니다. ㅎㅎ

문자에서 숫자 형변환은 항상 아스키코드를 유념해두어야 해요.

감사합니다.

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요. ㅎㅎ

1111 등을 하나의 문자열로 받아서

for char : s

이런식으로 문자열을 문자로 분해해서 처리한다는 의미입니다.

 

교안에 해당 부분을 추가 및 수정했는데요. 다음과 같습니다.

cin으로 받을 때는 개행문자(띄어쓰기, 한줄띄기)까지 받을 수 있다라는 것을 기억해주세요. 

#include<bits/stdc++.h>
using namespace std; 
int n, m, a[10][10];
string s; 
int main(){
	cin >> n >> m; 
	for(int i = 0; i < n; i++){
		cin >> s;
		for(int j = 0; j < m; j++){
			a[i][j] = s[j] - '0';
		} 
	}
	for(int i = 0; i < n; i++){ 
		for(int j = 0; j < m; j++){
			cout << a[i][j]; 
		} 
		cout << '\n';
	}
}
/*
4 4 
1000
0000
0111
0000
1000
0000
0111
0000

*/ 

위의 코드처럼 문자열 s를 받아 문자열을 문자로 분해(s[j]) 해서 형변환 s[j] - ‘0’을 통해 숫자를 int형 배열인 a[i][j] 배열에 넣는 것을 볼 수 있습니다.

음.. 좋다 안좋다는 없습니다. 여러가지 해보시고 본인이 편한 방식으로 하시면 됩니다.

  • 저는 개인적으로 cin이 편해요.

감사합니다.