본문 바로가기

코딩 테스트/프로그래머스

(64)
[프로그래머스 Level 2, C++] 숫자의 표현 문제 : 숫자의 표현 풀이 방법 처음 시작하는 숫자를 정해서 반복문으로 1씩 더하고 15이상이면 종료 15이면 answer++ 해주고 반복문이 끝나면 시작하는 숫자 ++ 이런식으로 하면 될 것 같아서 만들어 봤는데 잘 돌아가서 다행이였다 어떤 사람은 그냥 2중 for문으로 만들었던데 깔끔하고 나쁘지 않은 것 같았다.... 수학적 요소가 있다고 하긴 어렵고 노가다 느낌 노가다를 얼마나 효율적으로 쓰려나 싶었는데 어렵네 소스 코드 #include #include using namespace std; int solution(int n) { int answer = 0; int i = 1, u = 0, sum = 0; while(i < n) { sum += i; u = ++i; while(true) { sum +..
[프로그래머스 Level 2, C++] 다음 큰 숫자 문제 : 다음 큰 숫자 풀이 방법 2진수로 변환만 한다면 간단한 문제인데 bitset의 count 메소드를 알았다면 좋았을 것 같다 bitset의 count메소드는 1의 개수를 반환해주는데 이 문제는 1의 개수가 같아야 한다는 조건이 있으니 더 쉽게 접근 할 수 있었을 것 같다. 소스 코드 #include #include #include using namespace std; string toBinary(int n) { string r; while (n != 0){ r += ( n % 2 == 0 ? "0" : "1" ); n /= 2; } return r; } int solution(int n) { int answer = 0; string bin = toBinary(n); int count_1 = cou..
[프로그래머스 Level 2, C++] 최솟값 만들기 문제 : 최솟값 만들기 풀이 방법 두 개의 배열에서 하나는 최대값 하나는 최솟값을 꺼내서 곱하고 더하는 과정을 반복하면 된다. 처음에는 max_element, min_element를 사용해서 테스트케이스와 제출케이스는 성공했지만 효율성에서 오답이 났었다. 그래서 뭘로 하지 하다가 각각 오름차순, 내림차순 정렬을 해서 곱해도 똑같으니 sort로 정렬을 해보자 해서 했더니 정답이었다 .... 이놈의 효율성 greater()를 sort 마지막에 넣으면 내림차순으로 정렬된다. 소스 코드 #include #include #include using namespace std; int solution(vector A, vector B) { int answer = 0; sort(A.begin(), A.end()); so..
[프로그래머스 Level 2, C++] N-Queen 문제 : N-Queen 풀이 방법 솔직히 잘 모르겠다 문제의 질문하기에서 2차원으로 하지말고 1차원으로 해야 효율성에서 통과할 수 있다고 하고 기존 체스와 새로운 체스의 각행과 열의 차의 절대값이 같으면 기울기가 같으니 대각선 체크를 할 수 있다고 하는데 도통 뭔소린지 모르겠더라 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ https://cryptosalamander.tistory.com/58 [백준 / BOJ] - 9663번 N-Queen C++ 풀이 백준 - 단계별로 풀어보기 [9663] https://www.acmicpc.net/problem/9663 문제 풀이 N-Queen 문제는 백트래킹의 가장 대표적인 예제로서, 퀸의 특성상 체스판 한 행당 한 개의 퀸만 존재할 수 있다는 것을 전제.. cryptosalamander.t..
[프로그래머스 Level 1, C++] 신고 결과 받기 문제 : 신고 결과 받기 풀이 방법 https://youtu.be/SHX3FgLx014 처음에는 내 방식 대로 풀었을 때 테스트 케이스는 통과 했었다.. 근데 제출하니까 실패 거의 반 이상을 차지해서 좀 더 고민하다가 3시간 이상 넘어가니까 못풀겠더라 그래서 유튜브에 찾아보니까 이렇게 풀이랑 코드랑 같이 있는 것을 보고 배웠다. 이분은 map이랑 set을 사용하는데 중복을 없애기 위해 set을 사용한다고 했다. report.erase(unique(report.begin(), report.end()), report.end()); 나는 이거면 중복을 제거 하기 때문에 이거만 쓰고 set을 쓰지 않았는데 오류가 나더라 아마도 set을 써야 하는게 맞았던 것 같다. 해쉬랑 set좀 더 공부해야할 것 같다 소스 ..
[프로그래머스 Level 1, C++] 키패드 누르기 문제 : 키패드 누르기 풀이 방법 키패드의 위치를 어떻게 구할까 생각하다가 그냥 각 키패드 번호의 좌표계를 만들어서 두 점사이의 거리 공식을 이용하면 풀 수 있겠다고 생각을 했었습니다. 왼쪽 열과 오른쪽 열은 무조건 누르는 손가락이 정해져있지만 가온데 열은 가까운 손가락으로 누르는 조건이 있습니다. 그렇다면 두 점사이의 거리 공식을 이용하면 구하겠지 했는데 막상 만들어 보니 실패라고 뜨더군요. 알고보니 유클리드 거리를 쓰는게 아니라 맨해튼 거리를 쓰는 것이 정답이었습니다. 우리가 알고 있는 두 점 사이의 공식이 유클리드 거리었고 이게 맨해튼 거리라고 합니다. 문제 조건에 상하좌우로 1칸씩 움직인다고 했기 때문에 맨해튼 거리 공식을 써서 풀어야 했던겁니다. 소스 코드 #include #include #in..
[프로그래머스 Level 1, C++] 크레인 인형뽑기 게임 문제 : 크레인 인형뽑기 게임 풀이 방법 스택은 넣은 순서 반대로 꺼내는 특징이 있기 때문에 쓰면 크레인으로 집은 인형들을 관리하기 쉬울 것 같아서 스택을 써봤는데 그냥 벡터로 했어도 문제 없었을 것 같다. 크레인으로 뽑은 인형의 자리는 0으로 채우기만 한다면 가볍게 풀 수 있는 문제이다. 소스 코드 #include #include #include using namespace std; int solution(vector board, vector moves) { int answer = 0; stack s; for(int & i : moves) { for(vector & u : board) { if(u[i-1] != 0) { if(s.empty() || s.top() != u[i-1]) { s.push(u[..
[프로그래머스 Level 1, C++] 실패율 문제 : 실패율 풀이 방법 answer 값으로 실패율을 넣는게 아니라 스테이지 단계를 넣어야 해서 이걸 어떻게 해야할까 하다가 2차원 배열을 만들고 0번째에는 스테이지, 1번째에는 실패율을 넣고 내림차순 조건으로 1번째만 보고 정렬을 한다면 하고 생각이 떠올라서 했는데 되어서 다행이었다. 실패율을 만드는 방법은 해당 단계 / 단계를 클리어한 플레이어 수로 만들면 되는데 스테이지를 전부 클리어한 경우도 있기 때문에 이 경우를 참고하고 클리어한 플레이어를 어떻게 구하면 될까 하고 생각을하다가 count_if로 해당 단계보다 큰 숫자를 가진 요소의 갯수를 더하면 쉽게 구할 수 있었다. count_if에서 비교할 변수는 지역변수로 넣으면 이상하게 오류가 나기에 전역변수로 빼줘야했다. 하다보니 ignal: flo..