반응형

프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr




나의 풀이
function solution(survey, choices) {
const scores = getScoresByPersonalityType(survey, choices);
const resultOfPersonalityTypeTest = calculateScores(scores);
return resultOfPersonalityTypeTest;
}
function getScoresByPersonalityType(survey, choices) {
// 성격 유형별 점수
const scores = {
R: 0,
T: 0,
C: 0,
F: 0,
J: 0,
M: 0,
A: 0,
N: 0,
};
for (let i = 0; i < survey.length; i++) {
// 모르겠다로 응답했으면 점수 계산 할 필요가 없다.
// 따라서 4가 나오면 굳이 for문을 다 실행시킬 필요없이 바로 다음index로
if (choices[i] === 4) continue;
// 비동의쪽으로 응답했을 때
if (choices[i] < 4) {
// survey 왼쪽 캐릭터의 점수를 4 - choices[i] 만큼 올린다.
// 매우 비동의 : 3점, 비동의 : 2점, 약간 비동의 : 1점이기에 4 - choices[i]를 해줌
scores[survey[i][0]] += 4 - choices[i];
} else {
// 동의쪽으로 응답했을 때
scores[survey[i][1]] += choices[i] - 4;
}
}
// 계산된 scores 객체 return
return scores;
}
function calculateScores(scores) {
let result = ''; // 성격 유형 테스트 결과
// 1번 지표, 2번 지표, 3번 지표, 4번 지표 순서대로 배열 생성
const order = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'];
// n번 지표에서 점수가 더 큰 성격 유형을 result에 넣기
for (let i = 0; i < order.length; i += 2) {
// n번 지표에서 성격 유형 점수가 같을 때
if (scores[order[i]] === scores[order[i + 1]]) {
// 사전 순으로 빠른 성격 유형을 검사자의 성격 유형으로 판단
const min = Math.min(order[i].charCodeAt(), order[i].charCodeAt());
result += String.fromCharCode(min);
continue;
}
// n번 지표에서 성격 유형 검사 점수들이 크거나 작을 때
// 점수가 더 큰 성경 유형을 결과에 반영
scores[order[i]] > scores[order[i + 1]]
? (result += order[i])
: (result += order[i + 1]);
}
return result;
}
다른 사람 풀이
function solution(survey, choices) {
let answer = '';
const obj = {
'R': 0,
'T': 0,
'C': 0,
'F': 0,
'J': 0,
'M': 0,
'A': 0,
'N': 0
}
const aplph = survey.map((v, i) => {
if(choices[i] > 4) obj[v.substring(1,2)] += choices[i] - 4
if(choices[i] < 4) obj[v.substring(0,1)] += 4 - choices[i]
})
obj['R'] >= obj['T'] ? answer +='R' : answer += 'T';
obj['C'] >= obj['F'] ? answer +='C' : answer += 'F';
obj['J'] >= obj['M'] ? answer +='J' : answer += 'M';
obj['A'] >= obj['N'] ? answer +='A' : answer += 'N';
return answer;
}
와 마지막에 obj['R'] >= obj['T'] 를 해주면 필자의 코드처럼 유니코드를 사용할 필요가없다.
더 빠른 캐릭터를 앞쪽에다 배치시켜서 같은 때는 앞쪽이 선택되어지게끔 하면 조금더 간단한 코드가 된다.
또한 성격 타입이 4쌍이라서 그렇게 많지 않으니 배열에넣어서 순회를 돌리는 등 보다 그냥 반복이 있더라도 이런식으로
나열하는 것도 괜찮은 것 같다.
반응형
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스-JS] level.1 신고 결과 받기 📌 (1) | 2023.06.07 |
---|---|
[프로그래머스-JS] level.2 요격 시스템 📌 (0) | 2023.06.02 |
[프로그래머스 - JS] level.1 개인정보 수집 유효기간 (0) | 2023.05.30 |
[프로그래머스] level.2 가장 큰수 😱 (0) | 2023.05.26 |
[프로그래머스] level.3 베스트앨범 (0) | 2023.05.25 |
반응형

프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr




나의 풀이
function solution(survey, choices) { const scores = getScoresByPersonalityType(survey, choices); const resultOfPersonalityTypeTest = calculateScores(scores); return resultOfPersonalityTypeTest; } function getScoresByPersonalityType(survey, choices) { // 성격 유형별 점수 const scores = { R: 0, T: 0, C: 0, F: 0, J: 0, M: 0, A: 0, N: 0, }; for (let i = 0; i < survey.length; i++) { // 모르겠다로 응답했으면 점수 계산 할 필요가 없다. // 따라서 4가 나오면 굳이 for문을 다 실행시킬 필요없이 바로 다음index로 if (choices[i] === 4) continue; // 비동의쪽으로 응답했을 때 if (choices[i] < 4) { // survey 왼쪽 캐릭터의 점수를 4 - choices[i] 만큼 올린다. // 매우 비동의 : 3점, 비동의 : 2점, 약간 비동의 : 1점이기에 4 - choices[i]를 해줌 scores[survey[i][0]] += 4 - choices[i]; } else { // 동의쪽으로 응답했을 때 scores[survey[i][1]] += choices[i] - 4; } } // 계산된 scores 객체 return return scores; } function calculateScores(scores) { let result = ''; // 성격 유형 테스트 결과 // 1번 지표, 2번 지표, 3번 지표, 4번 지표 순서대로 배열 생성 const order = ['R', 'T', 'C', 'F', 'J', 'M', 'A', 'N']; // n번 지표에서 점수가 더 큰 성격 유형을 result에 넣기 for (let i = 0; i < order.length; i += 2) { // n번 지표에서 성격 유형 점수가 같을 때 if (scores[order[i]] === scores[order[i + 1]]) { // 사전 순으로 빠른 성격 유형을 검사자의 성격 유형으로 판단 const min = Math.min(order[i].charCodeAt(), order[i].charCodeAt()); result += String.fromCharCode(min); continue; } // n번 지표에서 성격 유형 검사 점수들이 크거나 작을 때 // 점수가 더 큰 성경 유형을 결과에 반영 scores[order[i]] > scores[order[i + 1]] ? (result += order[i]) : (result += order[i + 1]); } return result; }
다른 사람 풀이
function solution(survey, choices) { let answer = ''; const obj = { 'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0 } const aplph = survey.map((v, i) => { if(choices[i] > 4) obj[v.substring(1,2)] += choices[i] - 4 if(choices[i] < 4) obj[v.substring(0,1)] += 4 - choices[i] }) obj['R'] >= obj['T'] ? answer +='R' : answer += 'T'; obj['C'] >= obj['F'] ? answer +='C' : answer += 'F'; obj['J'] >= obj['M'] ? answer +='J' : answer += 'M'; obj['A'] >= obj['N'] ? answer +='A' : answer += 'N'; return answer; }
와 마지막에 obj['R'] >= obj['T'] 를 해주면 필자의 코드처럼 유니코드를 사용할 필요가없다.
더 빠른 캐릭터를 앞쪽에다 배치시켜서 같은 때는 앞쪽이 선택되어지게끔 하면 조금더 간단한 코드가 된다.
또한 성격 타입이 4쌍이라서 그렇게 많지 않으니 배열에넣어서 순회를 돌리는 등 보다 그냥 반복이 있더라도 이런식으로
나열하는 것도 괜찮은 것 같다.
반응형
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스-JS] level.1 신고 결과 받기 📌 (1) | 2023.06.07 |
---|---|
[프로그래머스-JS] level.2 요격 시스템 📌 (0) | 2023.06.02 |
[프로그래머스 - JS] level.1 개인정보 수집 유효기간 (0) | 2023.05.30 |
[프로그래머스] level.2 가장 큰수 😱 (0) | 2023.05.26 |
[프로그래머스] level.3 베스트앨범 (0) | 2023.05.25 |