목록Development/Algorithm (15)
초보 개발자의 성장 일기
1. 문제 해석 아스키코드란? ASCII (American Standard Code for Information Interchange, 미국 정보 교환 표준 부호) 1963년 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계이다. 쉽게 얘기하면 컴퓨터에서 문자를 표현하려면 숫자를 이용해야 하는데 이때 문자 표현을 위한 약속들 중 한 가지가 아스키코드이다. 2. 문제 풀이 자바스크립트에서 아스키코드로 변환해주는 메소드가 있다. 아스키코드 관련 메소드를 더 찾아보았다. charCodeAt() 문자를 아스키 번호로 변환해준다. console.log('A'.charCodeAt()) // 65 String.fromCharCode(아스키 번호) 아스키 번호를 문자로 변환해준다. console.log(String..
1. 문제 해석 https://www.acmicpc.net/problem/10810 10810번: 공 넣기 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 또, 1번부터 N번까지 번호가 적혀있는 공을 매우 많이 가지고 있다. 가장 처음 바구니에는 공이 www.acmicpc.net 바구니안에는 하나의 공만 들어갈 수 있고 그 공에는 숫자가 적혀있다. 예를들어 1번 바구니에 공3번을 넣었다가 이후에 다시 공5번을 넣으면 1번 바구니에는 공5번만 남아있는 것이다. N개의 바구니가 주어지는데 M번 공을 넣는 문제이다. 2번째줄부터는 바구니의 범위와 공의 번호가 주어진다. 바구니의 범위에 공의 번호를 넣어주면 되는데, 공은 누적이 되지 않고 교체가 돼야 한다. 2..
1. 문제 해석 https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 사실 이 문제를 바로 이해하는데 시간이 조금 걸렸지만 알고나면 쉬운 문제이다. 첫번째, 세번째 줄은 배열의 개수이고, 4번째 있는 줄이 2번째 있는 줄의 배열에 존재하면 1, 존재하지 않으면 0으로 나타내면 된다. 2. 문제 풀이 처음에는 for문으로 m의 배열의 값이 n의 배열에서 일치하는 값이 있는지 includes로 확인했다. ..
1. 문제 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 2. 풀이 방법 첫번째 원소는 input의 행의 길이이다. shift로 이 원소를 배열에서 빼고, len변수에 담는다. 그리고 결과를 넣어줄 새 배열을 선언한다. for 반복문을 통해서 각 행을 지정해줄 i를 선언하고 for ...of를 사용하여 각각의 행안에 있는 원소가 '('일 경우 1을 더하고 아닌경우 즉, ')'일 경우에는 -1을한다. cnt의 결과..
문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 나의 해결 방법 map함수로 n번째를 뽑아 정렬을 하면 된다고 생각했다. ⇒ 오류 → word[n]은 문자열에서 인덱스 n에 해당하는 문자 하나를 의미하므로, sort를 사용할 수 없다. function solution(strings, n) { return strings.map(word => word[n..
문제 설명 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 나의 문제 해결 방법 배열로 만든 후 원소를 정수로 바꿔준 후 길이가 4, 6이 아니고 숫자가 아닌경우 false를 반환한다. function solution(s) { const newArr = s.split('') for(let i=0; i !isNaN(c)) } else { return false; } } 다른 분들의 풀이 방법을 조금 참고해서 더 간단하게 길이가 4, 6일경우를 if문 안에 넣어서 배열로 만든 후 모든 원소가 숫자일 경우 true를 반환하도록 하였다. 아닐 경우는 fal..
문제 설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 나의 문제 해결 방법 left부터 right까지 약수의 갯수를 구해서 짝수면 더하고 홀수면 뺀다. function solution(left, right) { let sum = 0; let cnt = 0; for(let i = left; i
문제 설명 정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다. 나의 문제 해결 방법 function solution(array, n) { let closestNum = array[0]; array.forEach(num => { if (Math.abs(num - n) < Math.abs(closestNum - n) || (Math.abs(num - n) === Math.abs(closestNum - n) && num < closestNum)) { closestNum = num; } }); return closestNum; ..
문제 설명 연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요. 나의 문제 해결 방법 처음 시작할 값을 정하고 num의 길이만큼 1을 더하여 배열을 만든다. 첫 값은 total값을 num으로 나눈 후에 내림을 해주고 num값에 2를 나누고 내림한 값을 다시 빼주면 배열의 첫번째 값이 된다. num이 짝수일떄는 처음값에 1을 더한다. function solution(num, total) { let firstNum = Math.floor(total/num) - Math.floor(num/2); let answer ..
문제 설명 정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요. 나의 문제 해결 방법 배열의 첫번째부터 마지막까지 반복문을 돌려서 n과 빼기 연산을 했을 때 절대값이 가장 작은 순서대로 배열을 정렬한다.(거품정렬) 그리고 만약 절대값이 같을경우 뒷 숫자가 클 때 앞 배열과 위치를 바꾼다. function solution(numlist, n) { let temp = 0; for (let i = 0; i < numlist.length - 1; i++) { for..