반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 직장인자기계발
- 패스트캠퍼스
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- AI
- 패캠챌린지
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- SKT
- 패스트캠퍼스후기
- 알버트
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- albert
- 직장인인강
- R
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
Archives
- Today
- Total
제주 탈출 일지
[c++][python3] 프로그래머스 레벨 1 - 모의고사 본문
728x90
반응형
첫번째 케이스 8번과 12번을 통과하지 못한 소스코드. 마지막 코드 어떤 사람이 많이 맞았는가를 출력할 떄 고민이 있었다. 한마디로 직관적으로 짠 코드. 한눈에 봐도 깔끔하지 못하다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> answers) {
//수포자 1
// 1, 2, 3, 4, 5, ...
//수포자 2
// 2, 1, 2, 3, 2, 4, 2, 5, ...
//수포자 3
// 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
int one = 0;
int two = 0;
int three = 0;
vector<int> math1 {1,2,3,4,5};
vector<int> math2 {2,1,2,3,2,4,2,5};
vector<int> math3 {3,3,1,1,2,2,4,4,5,5};
int a = math1.size();
int b = math2.size();
int c = math3.size();
for(int i = 0; i < answers.size(); i++)
{
// 1이 맞췄는가?
if(answers[i] == math1[i%a])
{
one++;
}
if(answers[i] == math2[i%b])
{
two++;
}
if(answers[i] == math3[i%c])
{
three++;
}
}
vector<int> new_answer;
if(one > two){
if(one == three){
new_answer.push_back(1);
new_answer.push_back(3);
}
else{
new_answer.push_back(1);
}
}
else if(one < two){
if(two == three){
new_answer.push_back(2);
new_answer.push_back(3);
}
else{
new_answer.push_back(2);
}
}
else{
if(one == three){
new_answer.push_back(1);
new_answer.push_back(2);
new_answer.push_back(3);
}
else if(three > one){
new_answer.push_back(3);
}
else{
new_answer.push_back(1);
new_answer.push_back(2);
}
}
return new_answer;
}
두 번째 개선코드
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<int> answers) {
//수포자 1
// 1, 2, 3, 4, 5, ...
//수포자 2
// 2, 1, 2, 3, 2, 4, 2, 5, ...
//수포자 3
// 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
map<int, int> sol;
vector<int> math1 {1,2,3,4,5};
vector<int> math2 {2,1,2,3,2,4,2,5};
vector<int> math3 {3,3,1,1,2,2,4,4,5,5};
int a = math1.size();
int b = math2.size();
int c = math3.size();
for(int i = 0; i < answers.size(); i++)
{
// 1이 맞췄는가?
if(answers[i] == math1[i%a])
{
sol[0]++;
}
if(answers[i] == math2[i%b])
{
sol[1]++;
}
if(answers[i] == math3[i%c])
{
sol[2]++;
}
}
vector<int> new_answer;
int max = 0;
for(int i = 0; i < 3; i++){
if(sol[i] > max){
max = sol[i];
}
}
for(int i = 0; i < 3; i ++){
if(max == sol[i]){
new_answer.push_back(i+1);
}
}
return new_answer;
}
코드길이가 확 줄었다. map을 사용했고, 그냥 3명이라 if문을 쓰는 것보다 반복문으로 최댓값을 찾아서, 최대값과 동일한 사람을 찾는게 빠르다고 판단되어 마지막 출력부를 저렇게 코딩했다.
어렵지 않은 문제.
2021.06.10)
파이썬3로 짠 코드 추가
첫 시도 57점.
def solution(answers):
answer = []
first = [1, 2, 3, 4, 5]
second = [2, 1, 2, 3, 2, 4, 2, 5]
third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
index_first = 0
index_second = 0
index_third = 0
score = {"1" : 0,"2" : 0,"3" : 0}
for i in answers:
index_first %= len(first)
index_second %= len(second)
index_third %= len(third)
if i == first[index_first]:
score["1"] += 1
if i == second[index_second] :
score["2"] += 1
if i == third[index_second] :
score["3"] += 1
index_first += 1
index_second += 1
index_third += 1
st_score = dict(sorted(score.items(),key=lambda x : x[1] ,reverse=True))
max = 0
for i in st_score:
if max <= st_score[i]:
max = st_score[i]
answer.append(int(i))
else:
break
return answer
ㅋㅋ 3번쨰 학생(third)의 인덱스를 비교할 때 실수가 있었다. index_second로 비교함.. ㅎ
그래서 헷갈림 방지를 위해서 아예 index를 통일했다.!
def solution(answers):
answer = []
first = [1, 2, 3, 4, 5]
second = [2, 1, 2, 3, 2, 4, 2, 5]
third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
index = 0
score = {"1" : 0,"2" : 0,"3" : 0}
for i in answers:
if i == first[index % len(first)]:
score["1"] += 1
if i == second[index % len(second)] :
score["2"] += 1
if i == third[index % len(third)] :
score["3"] += 1
index += 1
st_score = dict(sorted(score.items(), key=lambda x : x[1] ,reverse=True))
max = -1
for i in st_score:
if max <= st_score[i]:
max = st_score[i]
answer.append(int(i))
else:
break
answer.sort()
return answer
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[c++][python] 프로그래머스 레벨 1 - 체육복 (2) | 2020.10.27 |
---|---|
[c++][python3] 프로그래머스 레벨 1 - K번째 수 (0) | 2020.10.26 |
[c++] nhn pre-test 1 - 1 (0) | 2020.10.24 |
[C++] nhn 사전 테스트 - 행렬의 영역 (1) | 2020.10.24 |
[C++] 프로그래머스 레벨 1 - 완주하지 못한 사람 구하기 (0) | 2020.10.24 |
Comments