"나는 무엇을 풀었는가" 시리즈는 이렇게 시작했습니다.
- 취업 준비 중 몇 번의 코딩테스트를 보며 깨달은 것이 있다. 바로 기초가 중요하다. 그리하여 프로그래머스 Level.0부터 차근차근 다시 풀어보려고 한다.
- 단지 문제를 푸는 것보단, 왜 해당 함수를 썼는지 더 재사용이나 가독성을 높일 방법은 없는지, 그리고 해당 함수가 없다면 어떻게 풀 수 있을지와 같이 다양한 방법과 생각을 통해 사고력을 높이려고 한다.
- 그럼 레츠 고 !
문제설명 : 12시간제 형식을 24시간제 형식으로 변환하여 리턴하세요.
입/출력 :
console.log(timeConversion(07:05:45PM)) // 19:05:45
function timeConversion(s) {
let [day, time, minSec] = [s.slice(8, 10), s.slice(0, 2), s.slice(3, 8)];
if (day === "PM") {
if (time !== "12") time = 12 + (+time);
} else {
if (time === "12") time = '00';
}
return `${time}:${minSec}`;
}
function timeConversion(s) {
s = s.split(''); // 배열
const day = s.splice(8, 10).join('');
const [hh, mm, ss] = s.join('').split(':');
let nowTime = hh;
if (day === "PM") {
if (hh !== "12") nowTime = 12 + Number(hh);
} else {
if (hh === "12") nowTime = '00';
}
return `${nowTime}:${mm}:${ss}`;
}
문제설명 : 두 번째 인자로 받는 queries의 각 요소가 strings에 몇번 들어있는지 세어 각 요소의 반복 횟수를 담은 배열을 리턴하세요.
입/출력 :
console.log(matchingStrings([4, 아바, 바바, 아바 xzxb], [3, 아바, xzxb, ab])) // [2, 1, 0]
function matchingStrings(strings, queries) {
return queries.map(query => strings.filter(
string => query === string).length
)
}
문제설명 : 배열의 각 숫자는 양말의 색상을 나타낼 때, 각 색상이 일치하는 양말이 총 몇컬레 있는지 리턴하세요. 이때 한 켤레 당 양말 2개입니다.
입/출력 :
console.log(sockMerchant(7, [1, 2, 1, 2, 1, 3, 2])); // 2
function sockMerchant(n, ar) {
let pair = 0;
ar.sort();
while (ar.length > 0) {
if (ar[0] === ar[1]) {
pair++;
ar.shift();
ar.shift();
} else {
ar.shift();
}
}
return pair;
}
문제설명 : num_list의 첫 번째 원소부터 n 번째 원소까지의 모든 원소를 담은 리스트를 리턴하세요.
입/출력 :
console.log(solution([2, 1, 6], 1)); // [2]
function solution(num_list, n) {
return num_list.slice(0, n);
}
문제설명 : 항상 100개의 요소가 있는 배열이 주어지면, 배열의 각 요소가 존재하는 횟수를 세어 요소를 횟수로 바꿔 리턴하세요.
function countingSort(arr) {
// 100개의 요소가 있는 새 배열을 만들고 초기값으로 0을 채운다.
let resultArr = new Array(100).fill(0);
// 그리고 for 루프를 통해 원래 배열인 arr를 돌면서 resultArr의 인덱스 숫자를 1씩 증가시킨다.
for (let i of arr) {
resultArr[i]++;
}
return resultArr;
}
function countingSort(arr) {
let resultArr = [];
for (let i = 0; i < 100; i++) {
resultArr.push(0);
}
// 그리고 for 루프를 통해 원래 배열인 arr를 돌면서 resultArr의 인덱스 숫자를 1씩 증가시킨다.
for (let i of arr) {
resultArr[i]++;
}
return resultArr;
}
문제설명 : 2차원 배열의 좌측 상단에서 우측 하단의 대각선 요소들을 더한 값에서 우측 상단에서 좌측 하단의 대각선 요소들을 더한 값을 뺀 절대값을 리턴하세요.
입/출력 :
console.log(([[1, 2, 3], [4, 5, 6], [9, 8, 9]])) // 2
function diagonalDifference(arr) {
const n = arr.length;
let leftToRight = 0;
let rightToLeft = 0;
for (let i = 0; i < n ; i++) {
leftToRight += arr[i][i];
rightToLeft += arr[i][(n-1)-i]; // length는 1부터 시작하므로 -1을 해준다.
}
return Math.abs(leftToRight-rightToLeft);
}
function diagonalDifference(arr) {
const n = arr.length;
let leftToRight = 0;
let rightToLeft = 0;
for (let i = 0; i < n ; i++) {
leftToRight += arr[i][i];
rightToLeft += arr[i][(n-1)-i]; // length는 1부터 시작하므로 -1을 해준다.
}
const result = leftToRight - rightToLeft;
return result > 0 ? result : -result;
}
문제설명 : num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 리턴하세요.
입/출력 :
console.log(solution([4, 2, 6, 1, 7, 6], 2)); // [4, 6, 7]
function solution(num_list, n) {
let answer = [];
for (let i = 0; i < num_list.length; i+=n) {
answer.push(num_list[i]);
}
return answer;
}