본문 바로가기

블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기

[124일차 복습] C++ 기초 / 백준 1000번, 1330번, 2439번, 2908번, 2164번 코딩테스트 풀어보기

반응형

 

 

그동안 써온 언어 JS의 node.js나 python은 build / compile 기능이 없다! 보통 node [파일명] / python [파일명] 명령어를 사용해서 실행시켰는데 요건 안에 이미 build를 자동으로 해주어서 ! 

C++ 로 간단한 기초 공부해보고 build 해서 리눅스에서 명령어 실행해보기 

 

 

 오늘 배운점  

cin - 표준 입력 객체 

Console Input 의 약자로 " 콘솔 입력"을 뜻한다. 

cout처럼 객체로 존재하며, C의 scanf()라고 생각하면 된다. 

 

C 언어에서 <stdio.h>

<stdio.h> = standard input / output library  표준 입출력 라이브러리 

이와 같이 C++에서는 <iostream> = input / output stream 

 

C 언어에서 입출력 담당 : printf(), scanf() 

C++ 에서 입출력 담당 : std::cout , std::cin 

 

std::란? -> 먼저 namespace에 대해 알아야함. 

* namespace : 자신만의 이름을 사용할 수 있는 공간 (겹치는 변수 , 이름 등이 없도록) 

std란 C++ 표준에서 정의한 'namespace' 중 하나이다. 

iostream 헤더 파일에서 선언된 모든 이름은 std라는 공간 안에 있다는 것을 의미  

=> 그래서 위에서 사용했을 때 std::cout << a~ 요로코롬 사용함. 

만약 std:: 를 사용하고 싶지 않다면, 생략하고 싶다면 아래 명령어를 사용하면 된다. 

using namespace std; 

 

endl : standard end line : The endl is a predefined object of ostream class. It is used to insert a new line characters and flushes the stream.

cout << endl : Inserts a new line and flushes the stream cout << "\n" : Only inserts a new line.

 


 

 

 

C++ build / 실행 / 파일 불러오기 연숩

 

 

1. windows terminal 열기 

wsl 
mkdir workspace2  
cd workspace2
mkdir helloworld && cd helloworld
code .       // visual studio code 열림 

질문1. code . 명령어가 어떻게, 왜  열리는지 궁금 ! 

 

 

 

2. Visual Studio Code 세팅 

1) hello.cpp 파일 생성 

2) C/C++ , Remote-WSL 다운 

 

 

 

3. main 함수부터 코드 작성 시작 

JS와 다른 점 :

1) 모든 함수 / 변수의 dataType 정확하게 필요 ! 

2) return 값이 없어도 무조건 return 작성

3) 코드 끝에 ; 세미콜론 필수 

4) #include : 가져오기 명령어 in C++ 

5) 다른 파일 가져올 때 export 할 필요가 X -> 컴파일 

 

3-1. 코드 작성

#include <iostream>
#include <string>

int main(){
    std::cout << "hello C++" << std::endl;
    return 0;
}

#include <iostream>
#include <string>

using namespace std;

int main(){
    cout << "hello C++" << endl;
    return 0;
}

 

질문 : vsc 터미널 창에 리눅스가 뜨는 이유 !? 저번에 학원에서는 안떴는데......

 

3-2. build & 디버깅 package 설치 

* build 해주는 프로그램 설치 on Linux 

* update먼저 실행

sudo apt-get update
sudo apt-get install build-essential gdb     // build-essential & gdb 설치 

// 설치 여부 확인
whereis g++       // build-essential - code building 해주는 패키지 
whereis gdb        // gdb - 디버깅용 

 

 

3-3. bulid 하기 

g++ -o hello hello.cpp         // 명령어를 실행시키면 vsc 창에 "hello"라는 파일이 생성됨 

ls                   //파일 생성 확인
cat hello          // 외계어 나옴 
./hello             // 요렇게 파일 실행시켜야 내용이 나옴 

 

build 명령어 분석 

g++ -o hello hello.cpp 

= g++ : build를 하겠다. hello.cpp 파일을  -o : out 해라 hello 라는 이름을 가진 build 파일로 

= hello.cpp -------- g++ build --------> hello (바이너리파일) 

 

 

 

 

 

4. printf("") 기능 사용해보기 from <stdio.h>

#include <stdio.h>
#include <string>

using namespace std;

int main(){
    // cout << "hello C++" << endl;
    printf("hello stdio.h");
    return 0;
}

다시 빌드하고 출력해보기 

 

 

 

5. emily.h 파일 생성 후 hello.cpp 에서 사용해보기 

emily.h 파일 생성 & 코드 작성

#include <iostream>

using namespace std;

int emily(){
    cout << "hello emily" << endl;
    return 0;
}

hello.cpp

#include <iostream>

#include <string>
#include "emily.h"             // 파일 가져오기 
 
using namespace std;

int main(){
    emily();
    // cout << "hello C++" << endl;
    printf("hello stdio.h");
    return 0;
}

파일 많아지고 build할 것도 많아지면 매번 build하기 귀찮 ! -> make 사용 ! 

 

 

 

 

 

5. C++ io 기본 입출력 코테 풀어보기 

 

C++ 기초 알고리즘 풀어보기 

백준 1000번 / 1330번 / 2439번 / 2908번 / 2164번 풀어보기 

 

1. 백준 1000번 A+B 

https://www.acmicpc.net/problem/1000

 

1000번: A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

정답 코드 

#include <iostream>
#include <string>

using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    cout<<a+b<<endl;
    return 0;
}

js 하다가 새로운 언어하니깐 신기하다........

 

 

 

 

2. 백준 1330번 - 두 수 비교하기 (if문 사용) 

https://www.acmicpc.net/problem/1330

 

1330번: 두 수 비교하기

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

www.acmicpc.net

정답 코드 

#include <iostream>
#include <string>

using namespace std;

int main(){
    int a,b;
    cin>>a>>b;
    if(a>b)
    {
        cout<<">"<<endl;
    }
    else if(a<b)
    {
        cout<<"<"<<endl;
    }
    else
    {
        cout<<"=="<<endl;
    }
    return 0;
}

JS 와 if(){} 요 부분이 같다 

 

 

 

 

3. 백준 2439번 

https://www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

정답 코드

#include <iostream>
#include <string>

using namespace std;

int main(){
    int n;
    cin>>n;
    for (int i=1; i<=n; i++)
    {
        for(int j=n; j>i; j--) cout<<" ";
        for(int k=0; k<i; k++) cout<<"*";
        cout<<"\n";
    }
}

 

 

 

 

 

그냥 해보기 - 왼쪽부터 별찍기 

#include <iostream>
// #include <stdio.h>
#include <string>
// #include "emily.h"

using namespace std;

int main(){
    // emily();
    // cout << "hello C++" << endl;
    // printf("hello stdio.h"); //stdio.h 와 세트 
    int a;
    cin>>a;
    for(int i=1; i<=a; i++)
        {
            for(int j=1; j<=i; j++) {cout<<"*";}
            cout<<"\n";
        }
}

 

 

 

 

 

 

4. 백준 2908번 

https://www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

정답 코드 

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(){
    string a,b;
    int a_int, b_int;
    cin >> a>> b;

    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());

    a_int = stoi(a);
    b_int = stoi(b);

    if(a_int > b_int) cout<< a_int;
    else cout << b_int;

    return 0; 
}

#include <algorithm>  을 쓰고 reverse() 가 가능 ! 

stoi() 는 문자열을 int로 바꾸는 함수 

 

 

 

 

 

5. 백준 2164번

https://www.acmicpc.net/problem/2164

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

정답 코드 

#include <iostream>
#include <string>
#include <algorithm>
#include <queue>

using namespace std;

int main(){
    int n;
    queue <int> q;
    cin >> n;

    for (int i=1; i<=n; i++){
        q.push(i);
    }

    while(q.size()>1){
        q.pop();
        q.push(q.front());
        q.pop();  // q.front()는 가져와지고 제거하진 않아서 pop으로 제거 
    }

    cout << q.front() << endl;
    return 0;
}

 

 

 

 

 

 

 

 

 

references:

https://blog.naver.com/mk5918/221676141890

 

1. C++ 시작하기 | iostream , namespace

안녕하세요. 이번에는 C언어에 이은 C++에 대해 포스팅해보겠습니다. 이번에도 C언어 포스팅과 동일하게...

blog.naver.com

 

반응형