다음 주 알고리즘 스터디를 준비해야돼서 C++을 공부하려 그랬는데 이자식,,, 생각보다 어렵다.
이름공간이요...? 이런 건 초면인데용....
심지어 c언어 한 3달 안 썼다고 다 까먹음,,,ㅜㅠ
ㄱ그래서 씹어먹는 c++이라는 사이트를 한장한장 뿌수면은 불가능이고 빠르게 한 챕터씩 보면서 바로 백준 단계별 문제풀이를 진행하려고한다.
std::cout << /* 출력할 것 */ << /* 출력할 것 */ << ... << /* 출력할 것 */;
std라는 이름공간속 cout (c언어에서의 stdout 이라니까 바로 이해됨)
std::endl 은 그냥 화면에 엔터를 쳐주는 \n역할을 한다.
C언어와 동일하게 맨 마지막 ; 를 붙여주자!
1. 기본 출력과 엔터키
Hello World! (www.acmicpc.net/problem/2557) 를 출력하고 싶으면
std::cout<<Hello World!<<std::endl;
강한친구 대한육군(www.acmicpc.net/problem/10718)을 치고싶으면
for문은 아직 쓰지 않겠다.
std::cout<<"강한친구 대한육군"<<std::endl
<<"강한친구 대한육군"<<std::endl;
띄어쓰기를 해야되니까 endl을 한 번 쓰고 그 뒤에 이어서 강한친구 대한육군을 써준 후 ; 으로 마무리
2. 입력받기 cin
c에서 scanf 역할을 c++에서는 cin >> 이 한다. 연달아 입력 두 번을 어떻게 받을까 고민하다가 다른 사람의 소스코드를 봤는데 생각보다 쉬워서 당황해따 ; ㅂ ; 그냥 >> 한 번 더 하면 됨
std::cin >> /* 입력받을 변수 */ ...>> /* 입력받을 변수 */;
int a , b ;
std::cin>>a>>b;
std::cout<<a+b<<std::endl;
3. 소숫점 자릿수 조절
또 나를 괴롭힌다 소숫점 자릿수 ,,,, 그냥 (double)쓰면 될 줄 알았는데 자꾸 틀렸다고 그런다.
semaph.tistory.com/7를 참고했다.
c++은 기본값이 전체 6자리 고정에 반올림이다.
cout.precision(n); precision이라는 함수는 전체자리수를 n만큼 고정해준다.
cout << fixed;
cout.precision(n);
cout<<fixed는 소수점 아래자리를 고정 , precision을 아래에 연달아쓰면 소수점 아래자리가 n만큼으로 고정된다.
cout.unsetf(ios::fixed); 소수점 아래자리만으로 고정해놓은 걸 풀고싶으면 줄을 추가해주면된다.
헠 이제 using namespace std; 으로 바꿀거다.
4. switch문 복습
시험성적 처리는 switch문이 국룰인것인지 항상 매번 나온다
switch(score/10){
case 10:
case 9:
cout<<"A"<<endl;
break;
case 8:
cout<<"B"<<endl;
break;
case 7:
cout<<"C"<<endl;
break;
case 6:
cout<<"D"<<endl;
break;
default:
cout<<"F"<<endl;
break;
}
if문을 계속 쓰면 너무 지저분하니까 switch문을 쓴다.
90~100일 때, A인거에 대해서 어떻게 하지 고민했는데 여러 CASE에 대해서 같은 동작을 하고싶으면
그냥 아무것도 없이 연달아서 CASE를 쓰면 된다고한다 ㅎㅎ
5. if문에서 or 쓸 때
python 이랑 c랑 번갈아하다보면 매번 헷갈리는 것 중에 하나다.
(year%100 != 0) or (year%400 == 0) -- ❌
(year%100 != 0 or year%400 == 0) -- ⭕
6. cin,cout 대신 printf, scanf 쓰기
www.acmicpc.net/problem/15552 를 풀면서 c++에서도 scanf , printf를 쓸 수 있는 걸 처음 알았다,,,!
cupjoo.tistory.com/97 랑 takeknowledge.tistory.com/15 를 참고했다.
cin이 scanf에 비해 2.5배 정도 느리기 때문에 printf, scanf를 추천한다고 한다 ㅠㅠ
단, 사용하려면 C언어와 같이 #include<stdio.h>를 써줘야한다.
심장뛴다 그냥 C랑 너무 비슷한 거 같아서 살짝 기쁘려고한다.
#include<iostream> // 안써도 됨
using namespace std; //안써도 됨
#include<stdio.h>
int main(){
int n , i , a, b;
scanf("%d", &n);
for (i=0;i<n;i++){
scanf("%d %d" ,&a ,&b);
printf("%d\n" ,a+b);
}
}
이렇게 간단하게 해결 ㅎㅅㅎ 앞으로 scanf , printf를 사용하겠다.
7. EOF
www.acmicpc.net/problem/10951 문제를 풀려면 EOF 개념을 알아야한다.
공부를 분명 이번 여름에 했던 거 같은데^__________^ 어디갔누
EOF : END OF FILE의 약자로 , 파일이 끝났다는 것을 알려준다.
scanf는 기본적으로 받은 문자를 리턴하는데 , EOF를 만나면 -1을 반환한다.
윈도우에서는 ctrl+z를 누르면 EOF라고한다.
그럼 EOF를 입력받기전까지 계속 while문을 통해서 입력받으려면 코드를 어케 짜야할까
while문의 조건문에 eof가 아닐때라고 넣어주면 된다. 라는 생각으로 코드를 짰는데 틀렸다!
#include<stdio.h>
int main(){
int a, b;
while(scanf("%d %d" , &a,&b)!=EOF){
scanf("%d %d" , &a , &b);
printf("%d" ,a+b);
}
}
멘붕와서 질문 검색을 뒤진 결과 scanf를 while문에서 받았으면 그 이후로는 더 안받아도 된다고 한다.
#include<stdio.h>
int main(){
int a, b;
while(scanf("%d %d" , &a,&b)!=EOF){
printf("%d\n" ,a+b);
}
}
이렇게 짜면 정답! ╰(*°▽°*)╯사실 \n 안써서 몇 번 틀렸는데 생각보다 개행문자가 너무 힘들게 한다.
'알고리즘 > 알고리즘 관련 메모장' 카테고리의 다른 글
C++ 배열/벡터 copy 와 memset (0) | 2020.12.11 |
---|---|
BFS , DFS 알고리즘 - 예제풀이 (1) | 2020.12.09 |
c++ 3일차 (0) | 2020.11.13 |
C++ string 사용법 (0) | 2020.11.09 |
C++ - 2일차 백준 단계별로 풀기 5~7단계 (0) | 2020.11.08 |