문득 생각해 보니 최근 PS를 너무 안 했다는 생각이 들어서 무작정 다시 시작하게 되었습니다. 거진 몇 달을 쉬다 보니 원래 실력이 쉽사리 나지 않았습니다. 레벨 1 문제도 어려운 게 많더라고요. (이미 웬만한 난이도의 레벨 1 문제를 대부분 풀어서 그런 것도 있습니다. 레벨 2 문제부터는 완전히 새로운 알고리즘을 요하기에 아직 건드리지는 않았습니다.)
또 프로그래머스는 오랜만에 들어가 봤는데, 레벨 0 문제가 새로 만들어졌더군요. 기존 레벨 1의 난이도가 입문자에게는 버겁다는 의견이 있었나 봅니다.
올해 카카오 tech internship에 나온 1레벨 문제입니다.
🧷문제 링크
네, 대충 MBTI 짝퉁 검자시의 답변을 보고 유형을 판정하는 문제입니다.
단순 구형 문제이기 때문에 난이도는 그리 높지 않습니다.
아마 이 글을 보고 계신 고인물 분들은 이딴 걸 벨로그에 올리나 생각할 겁니다. 😓
function solution(survey, choices) {
let result = ''; // 결과 유형을 저장할 변수
const MBTI = { // 각 성격 유형의 점수를 저장하는 Object
R: 0, T: 0,
C: 0, F: 0,
J: 0, M: 0,
A: 0, N: 0
};
for (let i in survey) {
let [question, answer] = [survey[i], choices[i]];
if ([1, 2, 3].includes(answer)) { // 비동의면 앞의 유형
MBTI[question.at(0)] += (4 - answer);
} else if ([5, 6, 7].includes(answer)) { // 동의면 뒤의 유형
MBTI[question.at(1)] += (answer - 4);
} else { // 4점 = 아무것도 변화 없음
// do not change any scores of both type
}
}
// 더 간단히 줄일 방법 없나?
result += (MBTI.R >= MBTI.T ? 'R' : 'T');
result += (MBTI.C >= MBTI.F ? 'C' : 'F');
result += (MBTI.J >= MBTI.M ? 'J' : 'M');
result += (MBTI.A >= MBTI.N ? 'A' : 'N');
return result;
}
뭐 너무 단순한 문제라 해설하기도 애매하네요 😅
🧷문제 링크
이 문제도 간단한 축에 속하지만, js로 풀기에는 약간 까다로운 편입니다.
두 숫자에서 공통으로 들어가는 숫자를 뽑아 역순으로 정렬하는, 알고리즘은 간단한 문제지만 숫자의 개수까지 맞춰야 하기 때문에 제가 생각한 풀이에서는 문자열 내에서 특정 부분이 나타나는 횟수를 계산하는 함수가 필요했습니다. C++의 std::string::count
(char형 한정), python의 str.count()
같은 것 말이죠.
문제는 js에는 그런 함수가 없습니다. 그래서 js 내장 함수 String.prototype.split()
함수를 이용해 출현 횟수를 구하는 함수를 새로 짰습니다.
function count(string, target) {
return string.split('' + target).length - 1
}
function solution(X, Y) {
result = []; // 정답에 들어가는 숫자들의 배열
for (i=0; i<10; i++) { // 0~9의 숫자에 대해 순회
c = Math.min(count(X, i), count(Y, i))
for (j=0; j<c; j++) {
result.push('' + i) // 더 적은 출현 횟수만큼 배열에 추가
}
}
result = result.sort().reverse().join('')
return (result == '' ? '-1' : ( // 겹치는 숫자가 없다? '-1' 반환
+result == 0 ? '0' : result // 겹치는 게 0뿐이다? '0' 반환
))
}
아희라는 프로그래밍 언어를 아시나요? 난해한 프로그래밍 언어의 대표주자 중 하나인 아희는 한글로 프로그래밍이 가능하다는 엄청난 특징이 있는데, 문제는 '한국어'가 아니라 '한글'로 프로그래밍을 한다는 것입니다.
밤밣따빠밣밟따뿌
빠맣파빨받밤뚜뭏
돋밬탕빠맣붏두붇
볻뫃박발뚷투뭏붖
뫃도뫃희멓뭏뭏붘
뫃봌토범더벌뿌뚜
뽑뽀멓멓더벓뻐뚠
뽀덩벐멓뻐덕더벅
...
......?!
예, 이게 "Hello, world!"
를 출력하는 아희 코드입니다.
꺼무위키에서 아희의 문법을 살펴볼 수 있는데, 보다시피 장난이 아닙니다. 마치 어셈블리어의 코딩 스타일을 보는 듯한 경이로움이 느껴졌습니다.
"근데 이걸 왜 들고 왔음?"
그야 오늘은 한글날이기 때문이죠. 나랏말싸미 코드와 달라서야 되겠습니까.
다음 주에는 이걸로 PS 문제를 하나 풀어 보겠습니다. (!)