본문 바로가기

프로그래머스

(37)
[프로그래머스 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..
[프로그래머스 Level 1, C++] [1차] 다트 게임 문제 : [1차] 다트 게임 풀이 방법 벡터 배열을 하나 만들어서 dartResult를 전부 분해해서 다시 넣었다. 왠지 그렇게 하는게 조건문을 만들 경우 편할 것 같아서 그랬다. 문자열 10은 아스키코드가 따로 없다보니 1이 나오고 그다음 숫자가 0이면 10을 넣고 두칸 건너뛰는 방식으로 분해를 했고 answer 벡터를 만들고 int temp를 만들어서 SDT*#을 각각 계산해주고 temp를 answer 벡터에 넣고 마지막 answer에 answer 벡터의 값을 다 더해주는 방식으로 문제를 풀었다. *#이 나올때가 있고 안나올 때가있으며 10이라는 숫자가 나올 수 있으니 그걸 어떻게 해야할까 고민하는데 시간을 썼고 숫자를 어떻게 인식할지 거기에 시간을 많이 쓴거같다. 소스 코드 #include #inc..
[프로그래머스 Level 1, C++] 로또의 최고 순위와 최저 순위 문제 : 로또의 최고 순위와 최저 순위 풀이 방법 for문을 돌려서 lottos와 win_nums에 동일한 숫자가 있거나 lotts에 0이 있으면 미리 만들어 놓은 배열에 추가한다. 최고 순위는 배열의 크기 그 자체이고 최저 순위는 배열 요소에서 0을 제외한 나머지 크기이다. count_if()를 이용해서 0을 제외한 나머지 크기를 구하고 스위치문으로 등수를 구했다. 소스 코드 #include #include #include using namespace std; vector solution(vector lottos, vector win_nums) { vector answer; vector same_num; for(int & i : lottos) { for(int & u : win_nums) { if(i ..
[프로그래머스 Level 1, C++] [1차] 비밀지도 문제 : [1차] 비밀지도 풀이 방법 지도 두개를 겹치면 나오는 결과로 비밀지도를 풀어야 하는 컨셉의 문제이다. 지도 각 칸이 둘중 한 곳이라도 1이면 완성된 지도에서 1이 된다고 하는데 OR연산이 딱 맞다. | 연산을 해서 int temp에 넣고 그것을 2진법으로 만든 다음 string str에 1이면 #을 넣고 0이면 공백을 넣으면 된다. 2진법을 계산한 결과를 거꾸로 만들어야해서 stack을 써봤다 stack의 넣은 순서 반대로 나와야 하는 성질을 이용했다. 소스 코드 #include #include #include using namespace std; vector solution(int n, vector arr1, vector arr2) { vector answer; stack s_str; for..
[프로그래머스 Level 1, C++] 자릿수 더하기 문제 : 자릿수 더하기 풀이 방법 n % 10을 하면 자릿수가 나온다 소스 코드 #include using namespace std; int solution(int n) { int answer = 0; while(n!=0) { answer += n % 10; n /= 10; } return answer; }
[Level 1, C++] 두 정수 사이의 합 #include #include using namespace std; long long solution(int a, int b) { long long answer = 0; if (a == b) answer = a; else if (a > b) { for (int i = b; i a) { for (int i = a; i
[Level 1, C++] 모의고사 문제: 모의고사 풀이 방법 문제를 찍는 방식이 3명 모두 다르니까 반복자를 다르게 설정해줘야 겠다고 생각했다. for문의 반복자 하나로 간단하게 만들 방법이 반드시 있을거라고 생각하긴 했는데 그 방법이 떠오르지 않아서 반복자를 직접 만들어서 풀었다. 풀이 코드 #include #include #include using namespace std; vector solution(vector answers) { vector answer; int student_1[] = {1, 2, 3, 4, 5}; int student_2[] = {2, 1, 2, 3, 2, 4, 2, 5}; int student_3[] = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; int std_answers_count[] = ..