Hackers Rank는 문제가 기본으로 영어이기 때문에 크롬에서 한글 번역기를 사용해서 문제를 한번 읽고 진행하는게 좋습니다.
개인적으로 Hackers Rank는 문제 자체가 좀더 난해한 느낌이 있었습니다.(이건 사람마다 느끼는게 다르겠네요)
제가 지원한 회사 두 곳에서 HackersRank로 코딩 테스트를 봤었는데요. 회사마다 시간과 문제 수, 난이도가 달랐습니다.
해커스랭크는 문제가 어려우면 프로그래머스 4단계 정도 가까운 문제들이 많이 나옵니다. 여기서부터는 사실 개발의 영역이 아니라 사고력 문제가 아닐까 싶습니다.
필자는 프로그래머스 2단게도 제대로 못푸는 정도의 실력입니다. 두번째 회사는 난이도 자체가 높지 않았습니다. 풀이를 공유하고자 올리며, 제 실력을 감안하고 봐주시면 감사하겠습니다.
제가 봤었던 문제는 주어진 문자열에서 "aws"라는 글자를 삭제시켜 최소 길이의 문자열을 return 하는 문제였습니다.
function getFinalString(s) {
// Write your code here
let if_aws = 1;
while (if_aws != -1) {
s = s.split("AWS");
s = s.join("");
if_aws = s.indexOf("AWS");
}
if (s == 0) {
return -1;
} else {
return s;
}
}
console.log(getFinalString("AAWSWS"));
두번째 문제는 주어진 숫자를 가장 큰 숫자와 가장 작은수로 변환시켜 가장 큰수 - 가장 작은수의 차이를 return 하는 문제였습니다.
조건은 변화시키는 숫자와 동일한 숫자를 가진 모든 자리의 숫자도 같이 바꾸는 것입니다.
예를 들어, 808 이라는 숫자가 있다면, 제일 앞자리 숫자가 9일때 숫자가 커지므로 908로 바꾸고 동일한 8을 가지고 있는 마지막 자릿수도 9로 바꿔야 합니다.
가장 작은수는 동일하게 맨 앞자리가 1일때 이고, 8을 가지고 있는 마지막 자릿수도 1로 바꿔, 101이 됩니다.
function findRange(num) {
// Write your code here
num_array = num.toString().split("").map(Number);
let max_num;
let min_mun;
if (num_array[0] !== 9) {
max_num = num_array.map((ele) => {
if (ele === num_array[0]) {
return (ele = 9);
} else {
return ele;
}
});
} else {
not_9 = String(num).search(/[0-8]/g);
if (not_9 === -1) {
max_num = num_array;
} else {
max_num = num_array.map((ele) => {
if (num_array[not_9] === ele) {
return (ele = 9);
}
return ele;
});
}
}
if (num_array[0] !== 1) {
min_num = num_array.map((ele) => {
if (ele === num_array[0]) {
return (ele = 1);
} else {
return ele;
}
});
// console.log(num);
// console.log(max_num);
} else {
not_1_0 = String(num).search(/[2-9]/g);
if (not_1_0 === -1) {
min_num = num_array;
} else {
min_num = num_array.map((ele) => {
if (num_array[not_1_0] === ele) {
return (ele = 0);
}
return ele;
});
}
}
return Number(max_num.join("")) - Number(min_num.join(""));
}
console.log(findRange(909));
세번째 문제는 아쉽게도 3가지 테스트 케이스밖에 통과하지 못했습니다.
배열 a가 주어졌을때 a의 모든 합이 k와 같거나 작게 만드는 가장 긴 배열 길이를 구하는 문제입니다.
제가 생각한 풀이는 맨 앞의 원소와 맨 뒤의 원소의 크기 차이를 비교한 이후에 더 큰 원소를 빼는 걸로 생각했지만, 생각보다 여러 케이스에서는 해결이 되지 않아 포기했습니다..ㅎ
function maxLength(a, k) {
// Write your code here
let first_index = 0;
let last_index = a.length - 1;
let sum = 0;
a.map((e) => {
sum = sum + e;
});
while (sum > k) {
if (a[first_index] >= a[last_index]) {
sum = sum - a[first_index];
first_index += 1;
} else {
sum = sum - a[last_index];
last_index -= 1;
}
}
console.log(first_index, last_index);
return last_index - first_index + 1;
}
console.log(maxLength([3, 1, 2, 1], 4));
console.log(maxLength([1, 2, 3], 4));
HackersRank는 백준에 좀더 가까운 사이트라 미리 여러 테스트 코드를 짜보고 풀이하시는걸 추천드립니다! ㅎㅎ