Coding - 완전탐색
모의고사
        from Programmers
        문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건
시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.
입출력 예
answers	return
[1,2,3,4,5]	[1]
[1,3,2,4,2]	[1,2,3]
입출력 예 설명
입출력 예 #1

수포자 1은 모든 문제를 맞혔습니다.
수포자 2는 모든 문제를 틀렸습니다.
수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

입출력 예 #2

모든 사람이 2문제씩을 맞췄습니다.
      
#include <string> #include <vector> #include <algorithm> using namespace std; vector<int> solution(vector<int> answers) { vector<int> FST(3), F, S, T; vector<int> answer; F={1, 2, 3, 4, 5}; S={2, 1, 2, 3, 2, 4, 2, 5}; T={3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; for(int i=0;i<answers.size();i++){ if(answers[i]==F[i%F.size()]){ FST[0]++; } if(answers[i]==S[i%S.size()]){ FST[1]++; } if(answers[i]==T[i%T.size()]){ FST[2]++; } } if(FST[0]==*max_element(FST.begin(), FST.end())){ answer.push_back(1); } if(FST[1]==*max_element(FST.begin(), FST.end())){ answer.push_back(2); } if(FST[2]==*max_element(FST.begin(), FST.end())){ answer.push_back(3); } return answer; }
소수 찾기
        from Programmers
        문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항
numbers는 길이 1 이상 7 이하인 문자열입니다.
numbers는 0~9까지 숫자만으로 이루어져 있습니다.
"013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예
numbers	return
"17"	3
"011"	2
입출력 예 설명
예제 #1
[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

예제 #2
[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

11과 011은 같은 숫자로 취급합니다.
      
뭐냐..
카펫
        문제 설명
        Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
        
        carpet.png
        
        Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
        
        Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
        
        제한사항
        갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
        노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
        카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
        입출력 예
        brown	yellow	return
        10	2	[4, 3]
        8	1	[3, 3]
        24	24	[8, 6]
      
#include <string> #include <vector> using namespace std; vector<int> solution(int brown, int yellow) { vector<int> answer; int b=1, y=1;//b=세로, y=Brown세로 //yellow를 만들 수 있는 가짓수를 만든다 //yello를 충족하면서 brown을 만들 수 있는 걸 만든다. //가로>=세로 while(1){ if(yellow%b==0){ y=b+2; while(1){ if((brown+yellow)%y==0&&((brown+yellow)/y-2)*b==yellow){ answer.push_back((brown+yellow)/y); answer.push_back(y); return answer; } y++; if(y>brown+yellow/y){ break; } } } b++; } return answer; }
Contact
  • Address : 서울특별시 서대문구 북아현로22길 18 (힐사이드빌) 302호
  • E-mail : june3004@naver.com
  • Tel : 010-5886-9393
  • 이 페이지는 프로필, 일기장, 정보공유, 공부 포트폴리오로 만들 예정입니다.