#0x02. 잡다한 작업들 #1

Leo Cho·2022년 10월 9일
1
post-thumbnail

PS 🎯

Programmers 🕊️

문득 생각해 보니 최근 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 문제를 하나 풀어 보겠습니다. (!)

profile
취미와 진로 사이, JS를 사랑하는 중학생 개발 지망생

0개의 댓글