no image
[C++] 백준 2525번 오븐 시계
문제 시간을 이용하는 문제이다. 풀이 방법 1. 현재 시간과 타이머의 시간. 두 번의 입력을 받음 2. 입력 받은 시간을 모두 분 단위로 변환하고 더함 3. 모두 더한 값들을 다시 시간과 분으로 변환 4. 24시는 0시로 취급한다고 했으니 h의 값에 %24를 해줌 문제 풀이 #include using namespace std; int main(void) { int h, m, timer, t; cin >> h >> m; cin >> timer; t = (60 * h) + m + timer; h = (t / 60) % 24; // 24시는 0으로 나타내기 위해 m = t % 60; cout
2022.12.22
no image
[C++] 백준 2884번 알람 시계(띠리링~)
문제 2884번 문제는 상근이의 지각을 막기 위한 알람 설정 방법에 대한 문제이다. 상근이가 원래 맞추던 알람 시간에서 45분 일찍 맞추면 된다. 예를 들어 10시에 맞췄다면 9시 15분에 맞추는 식으로 설정한다. 문제 풀이 #include using namespace std; int main(void) { int h, m; cin >> h >> m; if (m < 45) // 분이 45분 보다 적을 때 { m += 15; // 45 뺐으니까 15 더해줌 (총 60분) h --; // 시간에서 -1 if (h < 0) { h = 23; } } else { m -= 45; } cout
2022.12.22
no image
[C++] 백준 14681번 - 사분면 고르기
익숙한 사분면이 보인다..!! 1. x, y 좌표를 입력받는다. 2. 입력된 좌표로 1, 2, 3, 4분면 중 어디에 위치하고 있는지 출력한다. 코드를 작성하는데 두가지의 방법이 떠올랐다. - 첫번째 방법 #include using namespace std; int main(){ int x, y; cin >> x >> y; if (x > 0 && y > 0){ cout 0){ cout x >> y; if (x > 0){ if (y > 0) cout
2022.11.21
no image
[C++] 백준 2753번 - 윤년
윤년을 구하는 문제는 어떤 언어를 접하든 항상 푸는 문제 같다.. ㅎㅎ 문제에 나와있는 조건만 잘 써주면 손쉽게 해결할 수 있다. 1. 년도를 입력받는다. 2. 입력한 년도가 4의 배수 and (100의 배수가 아님) or (400의 배수))일 때, 1(윤년) 출력 #include using namespace std; int main(){ int year; cin >> year; if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0))){ cout
2022.11.21
no image
[C++] 백준 9498번 - 시험 성적
성적을 입력받는 간단한 문제이다. 1. 정수를 입력받는다. 2. 조건별로 출력한다. #include using namespace std; int main() { int score; cin >> score; if (score >= 90){ cout = 80){ cout = 70){ cout = 60){ cout
2022.11.21
no image
[C++] 백준 1330번 - 두 수 비교하기
두 수를 입력받아 비교하는 문제이다. 1. a, b 입력받기 2. 입력받은 두 수 비교 #include using namespace std; int main(void){ int a, b; cin >> a >> b; if (a > b) cout
2022.11.21
no image
[C++] 백준 10171번 - 고양이
음.. 고양이 얼굴을 출력하는 문제이다..(어딜 보아서 고양이일까.. 나의 작은 아기 고양이..) 이번 문제도 아주 간단하게 풀 수 있다. 1. 한 줄씩 고양이 얼굴을 출력한다. #include int main(){ using namespace std; cout
2022.11.21
no image
[C++] 백준 10430번 - 나머지
여러 복잡해 보이는 사칙연산을 사용해 푸는 문제이다. 복잡해보이지만, 자세히 보면 아주 간단한 문제이다. 1. 첫째 줄에서 a, b, c 입력받기 2. 입력받은 값을 이용한 사칙연산으로 출력하기 #include int main(){ using namespace std; int a, b, c; cin >> a >> b >> c; cout
2022.11.21
no image
[C++] 백준 3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
동혁이가 흰 색 피스를 찾았는데 검정색 피스보다 수가 부족하다. 몇 개를 더 찾아야 정상 피스의 수와 같아지는지 구하는 문제이다. 정상 피스의 수는 다음과 같다. king 1개, queen 1개, rook 2개, bishop 2개, night 2개, pawn 8개 1. 발견된 흰색 피스의 갯수 입력받기(king, queen, rook, bishop, night, pawn의 순으로) 2. 정상 피스의 수 - 찾은 피스의 수 #include //1. k=1, q=1, r=2, b=2, n=2, p=8 //2. 원래 피스의 수 - find int main(){ using namespace std; int king = 1; int queen = 1; int rook = 2; int bishop = 2; int ..
2022.11.21

 

문제

시간을 이용하는 문제이다.

 

풀이 방법

1. 현재 시간과 타이머의 시간. 두 번의 입력을 받음

2. 입력 받은 시간을 모두 분 단위로 변환하고 더함

3. 모두 더한 값들을 다시 시간과 분으로 변환

4. 24시는 0시로 취급한다고 했으니 h의 값에 %24를 해줌

 

문제 풀이

#include <iostream>
using namespace std;

int main(void)
{
    int h, m, timer, t;

    cin >> h >> m;
    cin >> timer;

    t = (60 * h) + m + timer;

    h = (t / 60) % 24;  // 24시는 0으로 나타내기 위해
    m = t % 60;


    cout << h << " " << m;
}

 

24시를 0시로 나타내는 과정에서 나는 조금 생각을 많이 해야 했다.

더 열심히 공부하쟈!

 

문제

2884번 문제는 상근이의 지각을 막기 위한 알람 설정 방법에 대한 문제이다.

상근이가 원래 맞추던 알람 시간에서 45분 일찍 맞추면 된다.

예를 들어 10시에 맞췄다면 9시 15분에 맞추는 식으로 설정한다.

 

 

문제 풀이

#include <iostream>
using namespace std;

int main(void)
{
    int h, m;

    cin >> h >> m;
    if (m < 45)    // 분이 45분 보다 적을 때
    { 
        m += 15;   // 45 뺐으니까 15 더해줌 (총 60분)
        h --;    // 시간에서 -1

        if (h < 0)
        {
            h = 23;
        }
    }
    else {
        m -= 45;
    }

    cout << h << " " << m;
}

h의 값이 0인 상태에서 -1을 하게 되면 시간에서 오류가 발생한다.

따라서 h의 값이 0보다 작아지면 23시로 설정하였다.

 

코드 참고 사이트 : https://aorica.tistory.com/20

 

[백준] 2884번 알람 시계 C++ 문제 풀이 if문

문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지

aorica.tistory.com

 

익숙한 사분면이 보인다..!!

 

1. x, y 좌표를 입력받는다.

2. 입력된 좌표로 1, 2, 3, 4분면 중 어디에 위치하고 있는지 출력한다.

 

코드를 작성하는데 두가지의 방법이 떠올랐다.

 

- 첫번째 방법

#include <iostream>
using namespace std;

int main(){
    int x, y;
    
    cin >> x >> y;
    
    if (x > 0 && y > 0){
        cout << 1;
    }
    else if (x < 0 && y > 0){
        cout << 2;
    }
    else if (x < 0 && y < 0){
        cout << 3;
    }
    else if (x > 0 && y < 0){
        cout << 4;
    }
}

사분면의 갯수만큼 if 문을 생성했고, 조건들을 넣어서 작성했다.

 

 

- 두번째 방법

#include <iostream>
using namespace std;

int main(){
    int x, y;
    
    cin >> x >> y;
    
    if (x > 0){
        if (y > 0)
            cout << 1;
        else
            cout << 4;
    }
    
    else {
        if (y > 0)
            cout << 2;
        else
            cout << 3;
    } 
}

x와 y의 값을 분할해서 다루는 형식이다.

 

여러 방법으로 코드를 작성해보면서 알고리즘 사고를 길러나가자.

윤년을 구하는 문제는 어떤 언어를 접하든 항상 푸는 문제 같다.. ㅎㅎ

 

문제에 나와있는 조건만 잘 써주면 손쉽게 해결할 수 있다.

 

1. 년도를 입력받는다.

2. 입력한 년도가 4의 배수 and (100의 배수가 아님) or (400의 배수))일 때, 1(윤년) 출력

 

#include <iostream>
using namespace std;

int main(){
    int year;
    
    cin >> year;
    
    if ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0))){
        cout << "1";  // 문자열로 출력
    }
    else
        cout << 0;  // 정수형으로 출력
}

이렇게 간단하게 풀 수 있다. 1과 0은 정수형으로도 표현할 수 있지만 문자열로도 표현할 수 있다!

성적을 입력받는 간단한 문제이다.

 

1. 정수를 입력받는다.

2. 조건별로 출력한다.

 

#include <iostream>
using namespace std;

int main() {
    int score;
    
    cin >> score;
    
    if (score >= 90){
        cout << "A";
    }
    else if (score >= 80){
        cout << "B";
    }
    else if (score >= 70){
        cout << "C";
    }
    else if (score >= 60){
        cout << "D";
    }
    else {
        cout << "F";
    }
}

if (score >= 90 && score <= 100) 이런 식으로 코드를 작성해도 되지만 뭔가 보기에 깔끔하면 좋겠고, 조건 검사를 8 -> 4번으로 줄일 수 있어 위와 같은 방법으로 코드를 작성하였다.

코드 효율성을 생각하며 기초를 다져가면 더 좋은 성장을 할 수 있을 것이다.

두 수를 입력받아 비교하는 문제이다.

 

1. a, b 입력받기

2. 입력받은 두 수 비교

 

#include <iostream>
using namespace std;

int main(void){
    int a, b;
    
    cin >> a >> b;
    
    if (a > b)
        cout << ">";
    
    else if (a < b)
        cout << "<";
    
    else
        cout << "==";
    

    return 0;
}

조건문 if를 사용하면 간단하게 문제를 풀 수 있다.

음.. 고양이 얼굴을 출력하는 문제이다..(어딜 보아서 고양이일까.. 나의 작은 아기 고양이..)

 

이번 문제도 아주 간단하게 풀 수 있다.

1. 한 줄씩 고양이 얼굴을 출력한다.

#include <iostream>

int main(){
    using namespace std;
    
    cout << "\\    /\\" << "\n";
    cout << " )  ( ')" << "\n";
    cout << "(  /  )" << "\n";
    cout << " \\(__)|" << "\n";
    
    
    return 0;
}

기호는 문제에서 복붙하면 되는데 여기서 주의할 점이 있다.

코드를 많이 접한 사람들은 이미 눈치챘을 수도 있다.

 

' \ ' (백슬래쉬) 뒤에 문자를 조합해서 특정 기능을 수행하는 문자를 이스케이프 시퀀스라고 한다.

\n : 개행(줄바꿈)

\t : tab의 역할

등이 있는데 개행과 탭을 가장 많이 사용해보았을 것이다.

 

' \ ' 자체가 문자를 붙여서 사용하다 보니 ' \ ' 만 출력하면 오류가 난다.

컴파일러에서 이스케이프 시퀀스를 만족하지 못하는 불안정한 상태로 인지해서 그렇다고 한다.

 

따라서 ' \ '을 출력하기 위해서는 또 다른 ' \ '과 조합해서 사용해야 한다.

" \\ " 과 같이 사용하면 ' \ '를 표현할 수 있다.

 

여러 복잡해 보이는 사칙연산을 사용해 푸는 문제이다.

복잡해보이지만, 자세히 보면 아주 간단한 문제이다. 

 

1. 첫째 줄에서 a, b, c 입력받기

2. 입력받은 값을 이용한 사칙연산으로 출력하기

 

#include <iostream>

int main(){
    using namespace std;
    
    int a, b, c;
    
    cin >> a >> b >> c;
    
    cout << (a + b) % c << "\n";
    cout << ((a % c) + (b % c)) % c << "\n";
    cout << (a * b) % c << "\n";
    cout << ((a % c) * (b % c)) % c << "\n";
    
    
    return 0;
}

생각보다 엄청 간단한 문제이다!

endl을 쓰지 않고 "\n"을 사용한 이유는 메모리 효율 문제 때문인데, 다음에 포스팅하도록 하겠다.

동혁이가 흰 색 피스를 찾았는데 검정색 피스보다 수가 부족하다.

몇 개를 더 찾아야 정상 피스의 수와 같아지는지 구하는 문제이다.

 

정상 피스의 수는 다음과 같다.

king 1개, queen 1개, rook 2개, bishop 2개, night 2개, pawn 8개

1. 발견된 흰색 피스의 갯수 입력받기(king, queen, rook, bishop, night, pawn의 순으로)

2. 정상 피스의 수 - 찾은 피스의 수

#include <iostream>
//1. k=1, q=1, r=2, b=2, n=2, p=8
//2. 원래 피스의 수 - find
int main(){
    using namespace std;
    int king = 1;
    int queen = 1;
    int rook = 2;
    int bishop = 2;
    int night = 2;
    int pawn = 8;
    
    int f_king, f_queen, f_rook, f_bishop, f_night, f_pawn;
    
    cin >> f_king;
    cin >> f_queen;
    cin >> f_rook;
    cin >> f_bishop;
    cin >> f_night;
    cin >> f_pawn;
    
    cout << king - f_king << " ";
    cout << queen - f_queen << " ";
    cout << rook - f_rook << " ";
    cout << bishop - f_bishop << " ";
    cout << night - f_night << " ";
    cout << pawn - f_pawn << " ";
    
    return 0;
}

참고로 출력할 때 한 줄로 출력하고 공백으로 구분되기 때문에 cout으로 출력한 뒤 꼭!! " "을 넣어줘야한다.

어려운 문제는 아니었지만, 변수 뒤에 공백처리를 안해서 한참동안 이해를 못했었다..