Problem Solved
[BOJ][Java] 11653번 - 소인수분해
문제 백준 11653번 문제: 소인수분해 문제 설명 소인수분해를 배우는 문제 정수 N이 주어졌을 때, 소인수분해하는 문제 말 그대로 소인수분해를 하는 문제이다. 나는 반복문을 안쓰고 싶었어서 재귀함수를 사용해 풀었다. 소인수분해를 해야 하는 수가 A라고 하면 A가 1이 되어 더 이상 나눌 수가 없을 때까지 재귀함수가 돌고 그 안에서는 A를 2부터 시작해서 1씩 커지도록 하는 숫자를 나눠 가며 소인수를 구해 나갔다. 재귀함수를 쓰면서 스택오버플로우 에러가 많이 나서 조심히 써야 할 것 같다. 성공 코드 import java.util.Scanner; public class Main { static int i = 2; public static void main(String[] args) { Scanner sc..
[BOJ][Java] 1037번 - 약수
문제 백준 1037번 문제: 약수 문제 설명 약수의 성질을 활용하는 문제 입력받은 수들을 약수로 가지는 수를 찾는 문제이다. 예로, 50의 약수를 찾아 본다면 아래와 같다. 2 5 10 25 더 큰 수인 80은 아래와 같다. 2 4 5 8 10 16 20 40 여기서 규칙을 찾을 수 있다. 만약 약수들이 배열에 담겨 있다면 인덱스가 0번인 수와 n-1(가장 끝의 인덱스)를 곱하면 원래의 찾으려는 수가 나온다. 그럼 다른 케이스를 찾아 보자. 9는 약수가 3뿐이다. 그렇기 때문에 인덱스가 0일 때와 n-1일 때의 숫자가 자연적으로 같다. 3*3이 되어 원하는 수를 찾을 수 있다. 하지만 이 약수들은 정렬되어 들어오지 않는다. 그래서 정렬이 필요하다. 성공 코드는 아래에서 볼 수 있다. 성공 코드 impor..
[Programmers][Javascript] 12903번 - 가운데 글자 가져오기
문제 [Programmers][Javascript] 12903번 - 가운데 글자 가져오기 문제 설명 글자 개수에 따라 다른 개수의 가운데 글자를 가져와 반환하는 문제 string의 길이가 홀수이면 가운데 한 글자만 반환해야 하고, 짝수이면 가운데 두 글자를 반환해야 한다. length를 2로 나눠서 중간값을 구한 후 if문을 사용해 substring으로 문자열을 뽑아냈다. 다른 사람 코드를 보니 substring을 사용하지 않고 string의 index로 가운데 글자를 뽑은 것을 볼 수 있었다. 머리 환기시킬 겸 풀어 봤다. 성공 코드 내 코드 const solution = s => { const middleIndex = Math.floor(s.length / 2); let answer = ""; if ..
![[BOJ][Javascript/nodejs] 1991번 - 트리 순회](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fdkaelx%2FbtqBAU4Rmnn%2FAAAAAAAAAAAAAAAAAAAAALVXH8n80GMz6S1iVdFOZDrFgLC9bDDjgRcdQSC3VGtU%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DQBL2MO9ku%252BNsU93WoRbAI2NkCH0%253D)
[BOJ][Javascript/nodejs] 1991번 - 트리 순회
문제 백준 1991번 문제: 트리 순회 알고리즘 문제를 풀 때 javascript에서 주의해야 할 사항들 입력받을 때 prompt나 setPrompt 를 사용하면 틀렸습니다가 뜬다. readline을 통해 입력받으면 줄이 나뉘어져 있어도 무한정으로 계속 입력을 받는다. 예로, 입력이 8줄에서 끝난다면, 8줄 입력받은 후의 지점에서 close를 꼭 시켜줘야 한다. 그래서 while문을 쓰지 않아도 된다. 문제 설명 이진트리의 루트, 왼쪽, 오른쪽 값이 계속 들어오는 값을 트리로 만들고, 트리를 전위 순회, 중위 순회, 후위 순회를 한 결과를 한 줄에 하나씩 출력하는 문제 전위 순회(preorder) : (root -> left -> right) 1->2->4->5->3 중위 순회(inorder) : (le..
[LeetCode][Javascript] 136번 - Single Number
문제 [LeetCode][Javascript] 136번 - Single Number 문제 설명 배열에서 중복되지 않는 하나의 수를 찾는 문제 splice 사용 Set에 for문을 돌면서 중복값이 없는 수만 저장해도 되겠지만 문제에서는 기존 배열에서 처리하라는 말인 것 같아 쓰지 않았다. 숫자들을 정렬해 인덱스 뒤의 숫자부터 for문으로 중복되는 숫자들을 지워 나간다. 그러면 마지막에 남는 수가 중복되지 않은 하나의 수가 된다. XOR 연산 사용 미쳤다 너무 간단하게 해결된다. 문제에서 중복되는 숫자가 있으면 2번 들어있으니 XOR로 배열의 모든 숫자를 계산한다. XOR은 숫자를 2진수로 변환해 각 숫자가 같으면 0, 다르면 1로 나타내어지는 연산자이다. 즉, 같은 숫자를 비트 연산자로 계산하면 0이 된다..
[LeetCode][Javascript] 202번 - Happy Number
문제 [LeetCode][Javascript] 202번 - Happy Number 문제 설명 숫자로 입력한 입력값 n을 문자열로 변환해 1글자씩 끊어 배열에 저장한다. 배열에서 reduce를 활용해 제곱합을 구해 calculate 변수에 저장한다. dp라는 배열에 이미 calculate 값이 이미 있다면 무한 반복하게 될테니 그것을 방지하기 위해 이미 있는 값이면 멈추고 false를 만환한다. dp에 없는 수이면 dp 배열에 추가한다. 반환값에 함수를 넣어 주면서 재귀적으로 실행될 수 있도록 한다. 성공 코드 const isHappy = (n, dp = []) => { if (n === 1) return true; let nArray = String(n).split(''); let calc..