[ C++ ] 프로그래머스 체육복
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42862 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  문제풀이체육복의 갯수를 단서로 잡고 풀이했다.도난당한 학생의 체육복 갯수는 -1, 일반 학생의 갯수는 0, 체육복 여벌이 있는 학생은 1로 잡았다. 1. 학생 리스트를 만들어서 현재 학생들의 체육복 갯수 상태를 채워주었다.2. 현재 인덱스의 값이 -1이라면, 앞 뒤를 체크하여 갯수를 조절해주었다.   내 코드#include #include #include using namespace std;int student[30];int solu..
2025.03.13
[ C++ ] 프로그래머스 로또의 최고 순위와 최저 순위
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/77484 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  나의 풀이아웃풋으로 구해야하는 것은 결국 나의 최대 등수, 최소 등수만 구하면 된다.그래서 0의 카운트도 0이 다 맞았을 경우, 0이 다 틀렸을 경우 이렇게 2개의 상황만 추가해주면된다.- 1등부터 6등까지 몇 개를 맞추면 되는지 map을 사용해서 키, 밸류를 설정- lottos를 순회하면서 win_nums의 번호가 있는지 확인하고 있다면 최소 카운트 증가 - 그리고 0이면 0을 관리하는 카운트 증가- 순회가 끝나고 최대 갯수에 최소..
2025.02.19
no image
[ C++ ] 프로그래머스 카드 뭉치
https://school.programmers.co.kr/learn/courses/30/lessons/159994 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제  나의 풀이- goal에 있는 단어를 cards1과 cards2의 첫번째 글자와 각각 비교한다.- 비교했을 때 둘 다 없으면 No를 바로 반환해버린다.- 있으면 있는 쪽의 0번째 단어를 삭제한다.이렇게 비교하면 순차적으로 비교할 수 있으면서 깔끔하게 코드를 작성할 수 있을 것 같아 이렇게 로직을 설계하였다. 내 코드#include #include #include #include using namespace std;string soluti..
2025.02.10
[C++] 프로그래머스 3진법 뒤집기
내 풀이진법 변경을 까먹어서 처음에 봤을 때 많이 헷갈렸던 문제이다.먼저 주어진 10진수를 3으로 나눈 나머지를 저장해준다.저장된 나머지를 다시 3을 곱해서 10진수로 만들어준다. 풀이 코드#include #include #include #include using namespace std;int solution(int n) { int answer = 0; vector temp; int three = 1; while (n != 0) { temp.push_back(n % 3); n /= 3; } for (int i = temp.size() - 1; i >= 0; i--) { answer += temp[i] * thre..
2025.01.16
no image
[C++] 프로그래머스 자릿수 더하기
문제자연수 N의 자릿수의 합을 구하는 문제이다. 풀이 방법1. N을 string 형태로 변환2. N의 길이만큼 N[i]를 정수로 변환해서 더함* 형변환이 가장 중요한 요인 문제 풀이#include #include #include using namespace std;int solution(int n){ int answer = 0; string str_n = to_string(n); for (int i = 0; i  char에서 int로 형변환 하는 과정에서 (int) 등의 여러 형변환을 사용해봤는데, N[i]의 ascii 코드로 변환이 되는 문제를 겪었다.char에서 '0'을 빼주면 int 형이 된다.원리는 ascii 코드에서는 숫자 문자들이 연속된 코드 값을 가지고 있다.'0'은 ..
2024.12.26
코딩테스트 공부 순서
(바쁘신 분들은 밑에 글 패스하고 바로 1번부터)현생에 치이기도 하고,, 여러가지 진로에 대한 고민을 많이 하느라 이제야 글을 쓰게 되었다.게임 업계 취업을 위한 퇴사를 했고 나름의 계획을 세웠다고 생각했으나... 큰 틀만 잡아놔서 시작하기 너무 막막했다..사실 그동안의 보상심리로 한달은 그냥 쭉 놀아서 개발적 사고가 모두 흐물흐물해졌다..사실 이쯤되니까 뭘 해야할지 길을 살짝 잃기도 하고,, 헤이해지기도 하고 무기력하고 난리가 났었지만! 😂주변 사람들의 약간의 쓴소리와 걱정들을 듣고 정신이 확 들었다. 내가 얼마나.. 충동적인 결정을 했고,, 무계획이고.. 한심하게 보이는지.. 후회하기엔 이미 엎질러진 물. 내가 선택한 길 내가 책임져야지..!많은 자기 성찰과 무참히 흩어진 내 생각 조각들을 맞추는 ..
2024.10.22
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

 

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42862

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제풀이

체육복의 갯수를 단서로 잡고 풀이했다.

도난당한 학생의 체육복 갯수는 -1, 일반 학생의 갯수는 0, 체육복 여벌이 있는 학생은 1로 잡았다.

 

1. 학생 리스트를 만들어서 현재 학생들의 체육복 갯수 상태를 채워주었다.

2. 현재 인덱스의 값이 -1이라면, 앞 뒤를 체크하여 갯수를 조절해주었다.

 

 

 

내 코드
#include <string>
#include <vector>
#include <iostream>

using namespace std;

int student[30];

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    
    // lost의 체육복 갯수
    for (int i = 0; i < lost.size(); i++)
    {
        student[lost[i]]--;
    }
    
    // reserve 체육복 갯수
    for (int i = 0; i < reserve.size(); i++)
    {
        student[reserve[i]]++;
    }
    
    for (int i = 1; i <= n; i++)
    {
        if (student[i] == -1)
        {
            if (student[i - 1] == 1)
            {
                student[i - 1] = 0;
                student[i] = 0;
            }
            else if (student[i + 1] == 1)
            {
                student[i + 1] = 0;
                student[i] = 0;
            }
        }
        
        if (student[i] >= 0)
        {
            answer++;
        }
    }
    
    
    return answer;
}

 

 

 

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/77484

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

나의 풀이

아웃풋으로 구해야하는 것은 결국 나의 최대 등수, 최소 등수만 구하면 된다.

그래서 0의 카운트도 0이 다 맞았을 경우, 0이 다 틀렸을 경우 이렇게 2개의 상황만 추가해주면된다.

- 1등부터 6등까지 몇 개를 맞추면 되는지 map을 사용해서 키, 밸류를 설정
- lottos를 순회하면서 win_nums의 번호가 있는지 확인하고 있다면 최소 카운트 증가
- 그리고 0이면 0을 관리하는 카운트 증가
- 순회가 끝나고 최대 갯수에 최소 개수 + 제로 카운트
- 각 최대, 최소 개수의 밸류값을 answer에 넣어줌

 

 

나의 코드
#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

vector<int> solution(vector<int> lottos, vector<int> win_nums) {
    vector<int> answer;
    int min_count = 0, max_count = 0;
    map<int, int> score;
    score[6] = 1;
    score[5] = 2;
    score[4] = 3;
    score[3] = 4;
    score[2] = 5;
    score[1] = 6;
    score[0] = 6;

    for (int value : lottos)
    {
        if (value == 0)
            max_count++;

        if (find(win_nums.begin(), win_nums.end(), value) - win_nums.begin() != win_nums.size())
            min_count++;
    }
    max_count+=min_count;
    
    answer.push_back(score[max_count]);
    answer.push_back(score[min_count]);
    
    return answer;
}

 

https://school.programmers.co.kr/learn/courses/30/lessons/159994

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제

 

 

나의 풀이
- goal에 있는 단어를 cards1과 cards2의 첫번째 글자와 각각 비교한다.
- 비교했을 때 둘 다 없으면 No를 바로 반환해버린다.
- 있으면 있는 쪽의 0번째 단어를 삭제한다.

이렇게 비교하면 순차적으로 비교할 수 있으면서 깔끔하게 코드를 작성할 수 있을 것 같아 이렇게 로직을 설계하였다.

 

내 코드
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

string solution(vector<string> cards1, vector<string> cards2, vector<string> goal) {
    for (int i = 0; i < goal.size(); i++)
    {
        if (cards1.size() > 0 && goal[i] == cards1[0])
            cards1.erase(remove(cards1.begin(), cards1.end(), goal[i]));
        else if (cards2.size() > 0 && goal[i] == cards2[0])
            cards2.erase(remove(cards2.begin(), cards2.end(), goal[i]));
        else
            return "No";
    }
    
    return "Yes";
}

 

 

remove와 erase를 같이 쓴 이유

remove와 erase를 다룬 게시물 첨부 예정

내 풀이

진법 변경을 까먹어서 처음에 봤을 때 많이 헷갈렸던 문제이다.
먼저 주어진 10진수를 3으로 나눈 나머지를 저장해준다.
저장된 나머지를 다시 3을 곱해서 10진수로 만들어준다.

 

풀이 코드

#include <string>
#include <vector>
#include <iostream>
#include <cmath>

using namespace std;

int solution(int n) {
    int answer = 0;
    vector<int> temp;
    int three = 1;
    
    while (n != 0)
    {
        temp.push_back(n % 3);
        n /= 3; 
    }
 
    for (int i = temp.size() - 1; i >= 0; i--)
    {
        answer += temp[i] * three;    
        three *= 3;
    }
    
    return answer;
}

문제

자연수 N의 자릿수의 합을 구하는 문제이다.

 

풀이 방법

1. N을 string 형태로 변환

2. N의 길이만큼 N[i]를 정수로 변환해서 더함

* 형변환이 가장 중요한 요인

 

문제 풀이

#include <iostream>
#include <string>
#include <typeinfo>

using namespace std;
int solution(int n)
{
    int answer = 0;
    string str_n = to_string(n);
    
    for (int i = 0; i < str_n.size(); i++)
    {
        answer += str_n[i] - '0';
    }

    return answer;
}

 

char에서 int로 형변환 하는 과정에서 (int) 등의 여러 형변환을 사용해봤는데, N[i]의 ascii 코드로 변환이 되는 문제를 겪었다.

char에서 '0'을 빼주면 int 형이 된다.

원리는 ascii 코드에서는 숫자 문자들이 연속된 코드 값을 가지고 있다.

'0'은 48, '1'은 49 ~ '9'는 57의 형태로 할당되어 있다.

그래서 char '2'를 int 2로 출력하고 싶다면 '2' - '0' 즉, 50 - 48 = 2 이런 형태로 형변환이 가능한 것이다.

 

처음에는 toInt, (int), stoi 등 여러가지를 다 써봤지만 다들 ascii 코드값을 가지고 있어 많이 혼란스러웠다.

이렇게 또 하나 알아간다 ㅎㅎ

 

 

(바쁘신 분들은 밑에 글 패스하고 바로 1번부터)

현생에 치이기도 하고,, 여러가지 진로에 대한 고민을 많이 하느라 이제야 글을 쓰게 되었다.

게임 업계 취업을 위한 퇴사를 했고 나름의 계획을 세웠다고 생각했으나... 큰 틀만 잡아놔서 시작하기 너무 막막했다..

사실 그동안의 보상심리로 한달은 그냥 쭉 놀아서 개발적 사고가 모두 흐물흐물해졌다..

사실 이쯤되니까 뭘 해야할지 길을 살짝 잃기도 하고,, 헤이해지기도 하고 무기력하고 난리가 났었지만! 😂

주변 사람들의 약간의 쓴소리와 걱정들을 듣고 정신이 확 들었다. 내가 얼마나.. 충동적인 결정을 했고,, 무계획이고.. 한심하게 보이는지.. 후회하기엔 이미 엎질러진 물. 내가 선택한 길 내가 책임져야지..!

많은 자기 성찰과 무참히 흩어진 내 생각 조각들을 맞추는 시간을 가졌다.

 

결론은 게임 개발.. 죽기 전에 한 번쯤 해봐야 후회가 없을 것 같아 게임 업계 취준을 다시 준비하게 되었다.

뭐든 설계부터 해야 후과정이 깔끔하게 진행되는 것을 경험한 나는.. 공부하기전 나만의 공부 순서? 커리큘럼을 짜볼 것이다.(사실 막상 혼자 독학하려니 뭐부터 해야할지 막막하고 계속 미루게 되더라..)

나 뿐만 아니라 비슷한 상황의 사람들에게 도움이 될까 하여 글로 남겨본다.

관련 링크는 모두 글 제일 마지막에 링크 걸어둘테니 참고하면 좋을 것 같다.

 

1. C++ 언어 문법 공부

이상하게 대학 시절 C++에 대한 강의는 없던터라 기초부터 고급문법까지 혼자 독학해야할 것 같다. 이 부분은 유튜브 강의나 "모두의 코드"의 강의를 통해 진행할 예정이다.

2. 자료구조, 알고리즘 공부

학교 다니면서 너무 놀았던 탓에 자료구조와 알고리즘에 대한 부분이 너무 약하다는 생각이 들었다.. 진짜 너무 .. 

자료구조 공부는 이론도 거의 까먹은 상태라 이론 위주의 책을 하나 구매하여 공부할 예정이고, 이론만 공부하다보면 실무에서 코드로 어떻게 접근하는지 모르는 경우가 많다. 나 또한 이 경우에 해당하고. 그래서 마침 이론으로만 봤던 자료구조를 어떻게 구현할 수 있는지 코드로 설명하는 유튜버 얌얌코딩 님을 를 찾았기 때문에 이 강의와 자료구조 책, 동빈나의 코딩테스트를 위한 책을 보며 병행할 예정이다.

3. 백준, 프로그래머스 쉬운 문제 다 풀기

언어에 대한 이해가 잡혔고, 문제를 이해하며 어떤 방법으로 로직을 설계할지 연습하는 과정이다.

쉬운 단계의 문제(프로그래머스 기준 0~1단계)를 하루에 최소 5문제 이상 풀고 단계가 오를 수록 최소 3문제 정도로 풀어나가려고 한다. 코딩 테스트 통과까지는 최소 백준 실버 1, 골드 2 정도로 해야하고, 프로그래머스는 레벨 2.5 ~ 3까지 풀어야 수월하게 문제를 풀 수 있다고 한다.. (힘내자..!)

 

4. 언리얼 엔진 프로젝트 제작

언리얼 엔진에서 사용하는 함수들이 있을텐데 그것들을 3번과정과 병행하며 공부하면 좋을 것 같다.

지금 포트폴리오도 내가 보기엔 너무 볼품이 없다.. 풍성하게 만들어나가고 싶다. 아자아자!

 

사실 어느 정도의 시간이 걸릴지 아직 잘 모르겠어서 너무 두렵고 막막하지만 그래도 하나하나 하다보면 어느새 성장해있고 현 상태에서 모르는 것들을 잘 이해하고 활용하는 미래의 나를 상상하며 열심히 버텨야겠다. 다들 파이팅! 🫡

 

모두의 코드 강의 링크 -> https://modoocode.com/135

 

씹어먹는 C++ 강좌 계획

모두의 코드 씹어먹는 C++ 강좌 계획 작성일 : 2011-03-05 이 글은 570645 번 읽혔습니다. 안녕하세요 여러분~ 이제 C 언어에 이어서 C++ 강좌를 연재하게 된 이재범 입니다. 저의 C++ 강좌는 여러분이 C

modoocode.com

 

자료구조 책 -> https://product.kyobobook.co.kr/detail/S000212705529

 

읽고 나면 진짜 쉬워지는 자료 구조 | 제레미 쿠비카 - 교보문고

읽고 나면 진짜 쉬워지는 자료 구조 | 기술 면접, 코딩 테스트의 필수 주제인 자료 구조! 최적의 자료 구조를 선택해야 더 효율적인 코드를 구현할 수 있다!자료 구조를 사용하는 궁극적인 이유

product.kyobobook.co.kr

 

유튜브 강의 -> https://www.youtube.com/watch?v=Vm2fNaEc1Lo&list=PLWKwcHKTXy5QXZEw5dJ6ubggsBhLtTsBa&index=1

 

아 그리고 내가 이 계획을 세우며 참고한 블로그 링크도 첨부하겠다.

https://skmouse.tistory.com/entry/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EA%B3%B5%EB%B6%80%EB%B0%A9%EB%B2%95

 

2024.09.12)코딩테스트 공부방법

[2024년 코딩테스트 빈출 문제유형]1. BFS, DFS2. 구현(빡구현 문제라고 많이들 칭한다)3. DP(Dynamic Programming)4. Union-Find[코딩테스트/취업&코테 정보] - 2024 개발자 부트캠프 무엇을 해야하나?[코딩테스트

skmouse.tistory.com

 

 

문제

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

 

풀이 방법

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의 값을 분할해서 다루는 형식이다.

 

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