문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결 코드 #include #include #include using namespace std; int solution(int n) { int answer = 0; bitset bit1 = bitset(n); // n을 2진수로 변환 string N = bit1.to_string(); // 문자 탐색의 용이성을 위해 이진수를 string으로 형변환 int N_count = 0; //n의 이진수에서 1의 개수 for(int i =0; i
배울 점이 정말 많았던 코드였다. 1) 알파벳인지 아닌지 확인하는 방법, 2) 소문자를 대문자로 변환하는 방법, 3) 소수점 아래는 버려서 출력하는 방법, 4)Char 두 개 합쳐서 string으로 만드는 방법 등 사소하지만 모르면 알 수 없는 여러 가지 함수들을 익힐 수 있어서 유익했다. 또한, 테스트 예제의 반이 넘는 4,7,9,10,11번에서 오류가 났었는데 이를 관통하는 반례를 찾아냈다. 혹시 나와 같은 어려움을 겪은 사람들에게 도움이 되면 좋겠다. 특히 문자 두 개를 합쳐서 문자열로 만드는 과정에서 '+' 연산자를 사용했는데 계속 아스키 코드 값으로 나오고 오류만 뱉어내서 정말 애를 많이 먹었다. 내가 해결한 방법은 문자열 s를 선언해서 s에 pushback 함수로 문자 하나씩 푸쉬해주고, 해당..
완전 탐색 (Brute-Force) 알고리즘에 대해서는 저번에도 다룬 적 있다. 반복문을 이용해서 가능성이 있는 모든 숫자를 대입해 정답을 찾는 것이 완전 탐색 알고리즘이다. 오늘은 이 알고리즘을 다룬 백준의 두 가지 문제를 풀어보도록 하자. 이 문제들은 완전 탐색을 사용하지 않고 풀려고 하면 복잡해진다. 필자도 이 두 문제들을 '규칙을 찾아서' 풀려고 하다가 여러 번 막혀서 포기했었다. 하지만 완전 탐색이 얼마나 단순하면서 편리한 알고리즘인지 익힌 뒤로는 금방 해결할 수 있었다. 1. 1436번 : 영화감독 숌 문제 설명 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말이라는 시리즈 영화의 감독이다. 조지 루카스..
1. 문제 본문: 백준 13305번 어떤 나라에 N개의 도시가 있다. 이 도시들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 km를 사용한다. 처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크기는 무제한이어서 얼마든지 많은 기름을 넣을 수 있다. 도로를 이용하여 이동할 때 1km마다 1리터의 기름을 사용한다. 각 도시에는 단 하나의 주유소가 있으며, 도시마다 주유소의 리터당 가격은 다를 수 있다. 가격의 단위는 원을 사용한다. 예를 들어, 이 나라에 다음 그림처럼 4개의 도시가 있다고..
본 포스팅은 '신고 결과 받기' 문제에 대해 여준 님께서 작성하신 코드에서 배운 내용을 정리했습니다. [프로그래머스] 신고 결과 받기 풀이 (2022 카카오 코딩테스트) 프로그래머스 - 신고 결과 받기 C++ 풀이 (2022 카카오 블라인드 채용 1차 코딩테스트) yjyoon-dev.github.io 1. map::find() map 컨테이너는 key와 value의 쌍으로 이루어진 '트리'이다. map에서 원하는 key 값을 찾기 위해서는 find() 메서드를 사용한다. 반환값 찾은 경우 iterator 못 찾은 경우 map::end + iterator가 아닌 그냥 조사만 하는 경우라면 std::count()를 쓰는 것을 추천한다. 원래 count()는 원소가 몇 개인지 세는 함수인데, map의 원소들은..
객체 지향의 3대 특징을 아는가? 취업 인터뷰에서 C++ 언어를 장점으로 내세운다면 반드시 듣게 되는 인터뷰 질문이다. C++ 언어의 가장 큰 특징은 '객체 지향 언어'라는 점인데, 이것이 어떤 효과를 내고 어떤 장점이 있는지 정확히 설명할 줄 알아야 C++에 대한 전문성을 증명하면서 면접관에게 좋은 인상을 줄 것이다. 그럼 그 복잡하고 어려운 특징을 어떻게 설명하면 좋을까? -본 내용은 성신여자대학교 컴퓨터 공학과 홍의석 교수님의 파이썬 강의를 참고하여 작성했습니다. PIE : Polymorphism Inheritance Encapsulation 객체 지향에 대한 질문을 받는다면 'PIE'를 기억하자. Pie는 Polymorphism, Inheritance, Encapsulation 세 단어의 앞 글자..
Vector는 C++ 언어를 사용해 여러 코드를 구성할 때 정말 유용하게 쓸 수 있는 자료구조이다. C++의 배열은 선언 시 배열의 '사이즈'가 정해져 있어야만 하는데, 여러 가지 동적 할당의 경우의 수가 많은 복잡한 코드를 구성할 때는 처음부터 사이즈를 정할 수 없거나, 사이즈를 능동적으로 줄였다 늘렸다 하는 경우가 많기 떄문에 이럴 때 'vector'를 사용하면 편리하다. 1. Vevtor 기본 사용법 vector가 정의되어 있는 헤더 파일 를 include 해준다. 선언 방법: vector [변수 명] (ex: vector v;) data type에는 내가 선언해줄 vector의 원소들의 데이터 타입을 입력해주면 되고, 변수 명에는 해당 벡터의 이름을 붙여주면 된다. 참고로, 에는 vector도 넣..
오늘의 주제는 '우선순위 큐'이다. 이는 내부적으로 '힙(Heap)' 자료구조를 구현하고 있기 때문에 함께 익혀보도록 하자. 또한 우선순위 큐를 활용한 프로그래밍 문제를 풀어보며 응용하는 시간도 가져보자. Priority Queue란? C++의 컨테이너 어댑터인 priority queue는 큐의 원소 중 가장 큰 값을 우선 순위로 두고 오름 차순으로 원소들을 배열하는 큐의 한 종류이다. 어떤 원소의 삽입(push)나 삭제(pop)가 발생할 경우 큐의 우선순위에 맞추어 정렬한다. 자료구조 Heap으로 구현되었기에 push에 의한 정렬은 O(logN)의 시간 복잡도를 가진다. 사용법과 기본 매서드는 아래와 같다. 1. priority_queue 선언 헤더 파일를 include 해준다: #include pq;..
[완전 탐색 알고리즘]은 무엇일까? '완전 탐색 알고리즘'은 이름에서 알 수 있듯 답을 찾기 위해 모든 상황을 다 계산하여 답을 찾도록 구현하는 알고리즘으로 시간이 가장 오래 걸리는 방법이지만, 가장 정확한 답을 찾을 수 있다. 완전 탐색 알고리즘을 풀 때, 'for 문'을 사용하면 금방 해결의 실마리를 찾아낼 수 있지만 for문을 얼마나 체계적으로, 효과적으로 짜느냐가 중요한 관건이다. 완전 탐색 알고리즘의 시간 복잡도는 for문이 얼마나 중첩되어 있느냐에 따라서 크게 다른데 for문이 x개 중첩되면 시간 복잡도가 n의 x제곱이 되는 만큼 시간 복잡도가 매우 크다. 완전 탐색을 사용해야 하는 두 문제를 리뷰해보면서 해당 알고리즘에 대해 파고들어 보자. 백준 2309번: 난이도 下 문제 설명: 왕비를 피..
스마트 포인터, 왜 사용하는 걸까? C언어로 개발을 하다 보면 new를 사용해서 메모리를 동적으로 할당받아 사용해야 하는 경우를 많이 볼 수 있다. 이때, 주의해야 할 점은 메모리를 할당받을 경우, 사용 후 반드시 Delete 해줘야 하는 것인데, 그렇지 않을 경우 '메모리 누수(Memory Leak)'가 발생하여 메모리를 낭비하게 된다. 그래서 최신 C++에서는 사용자가 메모리를 관리해야 하는 번거로움을 줄이고, 메모리/리소스 누수와 예외 안전성을 보장하기 위해 포인터처럼 동작하는 클래스 템플릿, '스마트 포인터'를 도입했다. 간단히 말하자면 스마트 포인터는 사용이 끝난 메모리를 자동으로 해제해준다. 스마트 포인터, 어떻게 사용하면 될까? 우선, 스마트 포인터는 세 가지 종류가 있다. 이들에 대해 각각..