티스토리 뷰
programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
#include<iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> dapVector;
vector<int> compare;
int dap = 0, s = 0, index = 0;
//첫번째 수포자 계산
//1,2,3,4,5,1,2,3,4,5...
for (int i = 0; i < answers.size(); i++) {
dap++;
if (dap == answers[i]) {
s++;
}
if (dap == 5) {
dap = 0;
}
}
compare.push_back(s);
s = 0;
//두번째 수포자 계산
dapVector = { 2,1,2,3,2,4,2,5 };
for (int i = 0; i < answers.size(); i++) {
if (dapVector[index] == answers[i]) {
s++;
}
if (index == dapVector.size() - 1) {
index = 0;
}
else {
index++;
}
}
compare.push_back(s);
s = 0;
index = 0;
//세번째 수포자 정답 패턴을 입력하기 위해 vector 초기화
dapVector.clear();
//세번째 수포자 계산
//3,3,1,1,2,2,4,4,5,5,3,3,1,1,2,2,4,4,5,5...
dapVector = { 3,3,1,1,2,2,4,4,5,5 };
for (int i = 0; i < answers.size(); i++) {
if (dapVector[index] == answers[i]) {
s++;
}
if (index == dapVector.size() - 1) {
index = 0;
}
else {
index++;
}
}
compare.push_back(s);
//첫번째가 가장 큰경우
if ((compare[0] > compare[1]) && (compare[0] > compare[2])) {
answer.push_back(1);
}
//두번째가 가장 큰경우
else if ((compare[1] > compare[0]) && (compare[1] > compare[2])) {
answer.push_back(2);
}
//세번째가 가장 큰경우
else if ((compare[2] > compare[0]) && (compare[2] > compare[1])) {
answer.push_back(3);
}
//첫번째 두번째 세번째 모두 같은 경우
else if ((compare[0] == compare[1]) && (compare[0] == compare[2]) && (compare[1] == compare[2])) {
answer.push_back(1);
answer.push_back(2);
answer.push_back(3);
}
else {
//첫번째와 두번째가 같은 경우
if (compare[0] == compare[1]) {
answer.push_back(1);
answer.push_back(2);
}
//첫번째와 세번째가 같은 경우
else if (compare[0] == compare[2]) {
answer.push_back(1);
answer.push_back(3);
}
//두번째와 세번째가 같은 경우
else if (compare[1] == compare[2]) {
answer.push_back(2);
answer.push_back(3);
}
}
return answer;
}
Rust로 CPP와 비슷하게 풀어봄
fn solution(answers : Vec<i32>) -> Vec<i32>{
let mut answer :Vec<i32> = Vec::new();
let mut dapVector : Vec<i32> = Vec::new();
let mut compare : Vec<i32> = Vec::new();
let mut dap : i32 = 0;
let mut s : i32 = 0;
let mut index : usize = 0;
//첫번째 계산
for i in 0 .. answers.len(){
dap += 1;
if dap == answers[i] {
s += 1;
}
if dap == 5 {
dap = 0;
}
}
compare.push(s);
s = 0;
//두번째 계산
dapVector = [2, 1, 2, 3, 2, 4, 2, 5].to_vec();
for i in 0 .. answers.len(){
if dapVector[index] == answers[i] {
s += 1;
}
if index == (dapVector.len() - 1) {
index = 0;
}else{
index += 1;
}
}
compare.push(s);
s = 0;
index = 0;
//세번째 계산
dapVector = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5].to_vec();
for i in 0 .. answers.len(){
if dapVector[index] == answers[i]{
s += 1;
}
if index == (dapVector.len() - 1) {
index = 0;
}else{
index += 1;
}
}
compare.push(s);
//1. 첫번째가 가장 큰 경우
if (compare[0] > compare[1]) && (compare[0] > compare[2]){
answer.push(1);
//2. 두번째가 가장 큰경우
}else if (compare[1] > compare[0]) && (compare[1] > compare[2]){
answer.push(2);
//3. 세번째가 가장 큰경우
}else if (compare[2] > compare[0]) && (compare[2] > compare[1]) {
answer.push(3);
//4. 첫번째 두번째 세번째 모두 같은경우
}else if (compare[0] == compare[1]) && (compare[0] == compare[2]) && (compare[1] == compare[2]){
answer.push(1);
answer.push(2);
answer.push(3);
}else{
//5. 첫번째와 두번째가 같은 경우
if compare[0] == compare[1]{
answer.push(1);
answer.push(2);
//6. 첫번째와 세번째가 같은 경우
}else if compare[0] == compare[2]{
answer.push(1);
answer.push(3);
//7. 두번째와 세번째가 같은 경우
}else if compare[1] == compare[2]{
answer.push(2);
answer.push(3);
}
}
answer
}
fn main() {
let mut answers : Vec<i32> = Vec::new();
let mut result : Vec<i32> = Vec::new();
answers = [1,3,2,4,2].to_vec();
result = solution(answers);
for i in 0 .. result.len(){
print!("{}", result[i]);
}
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[알고리즘문제] 프로그래머스 완주하지 못한 선수 (0) | 2021.03.11 |
---|---|
[알고리즘문제] 프로그래머스 두개 뽑아서 더하기 (0) | 2021.03.08 |
[알고리즘문제] 프로그래머스 크레인 인형뽑기 게임 (0) | 2021.03.08 |
[알고리즘문제] 백준 소풍 (0) | 2021.03.07 |
금액 분류 (0) | 2021.02.20 |