1.아이디어
c++2차원배열을 만들었다 처음에 string으로 만들려다가 익숙한 char형 2차원배열을 만들었다. 총5줄입력이니 str[5][i]는 확정이고 줄마다 최대입력이 15줄이니 공백과 널을 생각해서 17 str[5][17]로만들었다. 그리고 cin>>str[i]로 한줄마다 문자열 하나씩 받았다.
그리고 출력을할때 공백문자를빼고 출력을해야해서 str[k][j]!='\0' 널문자 가아니면 출력을 계속했다.
여기서 오늘 배운점은
cin은 공백을 무시한다 즉 문자를 읽다가 띄어쓰기를 만나면 그전 까지를 하나의 입력으로 받는다(띄어쓰기,엔터,탭등 이런문자가 나오면 그냥 무시한다, 대신 버퍼에는 그대로 남아있다.)
getline은 공백을 무시하지않는다. 여기서 차이가 발생한다 getline만 사용할경우 문자열을 치고 엔터를 쳤을 때, 엔터직전까지를 하나의 입력으로 받아들이고 엔터를 버린다. 버퍼에 남기지 않는다.그래서 다음getline을사용할때 버퍼에 남아있는것이 없기 때문에 문제가 되지 않는다.!
즉결론은 cin다음 getline을 사용할때 입력버퍼를 비워주는 cin.ignore()를 사용해야한다.
1.아이디어
string 문자열을 하나 선언하고 getline을이용해 공백포함하여 문자열을받는다
string의 인자 하나씩 돌아가며 rot13암호를만든다 공백은제외하고 범위는 string의 길이까지
2.소스코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
getline(cin,str);
int strlen=str.length();
//str[0]=str[0]+13;
//cout<<str<<endl;
//문자열 길이만큼 str을 돌면서 바꿔주는 for문
for(int i=0; i<strlen; i++)
{
//str안에 알파벳만 바꿔주는 for문
for(int j=0; j<27; j++)
{
if(str[i]=='a'+j)
{
if(str[i]<='m')
{
str[i]=str[i]+13;
break;
}
else if(str[i]>'m')
{
str[i]='a'+j-13;
}
}
if(str[i]=='A'+j)
{
if(str[i]<='M')
{
str[i]=str[i]+13;
break;
}
else if(str[i]>'M')
{
str[i]='A'+j-13;
}
}
}
}
cout<<str;
}
3.깨달은점
이문제를 푸는데 어려움은 없었으나 새로운 것을 깨달았다. str배열에 숫자 공백 말고 문자만 찾을려고 할때 str[i]>='a'&&str[i]<='a' 이런식으로 찾을수있다는 걸 알게되었다.
1.아이디어
일반적인 형식으로 sort함수와 n만큼 받고 벡터의 사이즈만큼 출력을 했더니 시간초과가 떠버렸다 알아본결과 cout는 printf에 비해 출력 속도가 느리다는 걸알게되었다. 자세하게 알아본 결과 c++에서 제공하는 cin,cout같은 함수는 사용잇 쉽지만 입출력 속도가 c의기본함수만 못하다고한다. 그래서 ios::sync_with_stdio(false)라는 함수를 써주기도 하는데 불안전해서 추천하지는 않는 다고한다. 그래서 시간과 관련된 문제가 생기면 c++이지만 scanf와 pritnf를 쓰기로했다.
11650번
1.아이디어
처음에 vector 두개를 만들어서 x좌표를 a에 y좌표를 b에 받고 따로 정렬해서 출력하기로 했는데 정답이 아니었다. 그래서 문제를 자세히 읽어보니 x y의 좌표값을 받는게 눈에 걸렸다. 그래서 구글링을 해보니 pair라는게 있었다. pair는 stl에서 쌍으로 표현되는 자료형을 위해 제공된는 컨테이너라고한다. 주로 좌표평면의 (x,y)의 좌표를 저장하거나, 이차원 배열의 인덱스 등 두개의 값을 동시에 엮어서 저장해야할때 사용된다고 한다. 그래서 pair를사용해 vector를만들고 구현하니 정답이되었다.
pair의 생성은 pair<(type1),(type2)>(이름);이다. 그리고 중요한점은 piar의 값을 참조할때는 순서대로 .first와 .second를 사용한다
2.코드
#include
#include <stdio.h>
#include
#include
using namespace std;
int main()
{
int n;
scanf("%d", &n);
vector<pair<int, int>>a(n);
for(int i=0; i<n; i++)
{
scanf("%d %d", &a[i]);
}
sort(a.begin(),a.end());
for(int i=0; i<n; i++)
{
printf("%d %d", a[i]);
if(i!=n-1)
{
printf("\n");
}
}
return 0;
}