문제 조건 분석입력: 두 개의 자연수출력: 최대 공약수, 최소 공배수설계최대 공약수 ⇒ 작은 수의 약수를 구하고 순회하며 더 큰 수의 약수인지 확인 ⇒ 그 중 가장 큰 값최소 공배수 ⇒ 큰 수*작은 수 이하까지 순회하며 주어진 수로 나눴을 때 나누어 떨어지는지 확인 ⇒ 그 중 가장 작은 값다른 풀이JS에서 최대공약수, 최소공배수를 구하는 더 깔끔한 풀이와 유클리드 호제법 이용한 방법들은 참고자료 아티클을 통해 확인할 수 있었다.참고자료JS로 GCD, LCM 구하기
알고리즘
문제 조건 분석입력: 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000), 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi. (-100,000 ≤ xi, yi ≤ 100,000)좌표는 항상 정수위치가 같은 두 점은 없다.출력: 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력설계이차 배열로 입력값 받아오기이후에 sort의 compareFn을 조건에 맞게 설계다른 풀이sort 비교함수 간단하면 분리 없이 이렇게 작성해도 괜찮을 것 같다.arr.sort(function (a, b) { if (a.x - b.x == 0) { return a.y - b.y; } else { return a.x - b.x; } });코드 개선forEach로 join하지 말고 sort 비교함수에서 구조 분해 할당으로 j..
문제 조건 분석입력: 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000), 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 그 다음 줄에는 M(1 ≤ M ≤ 100,000), 또 그 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -2^31 이상, 2^31미만이다.출력: M개의 줄에 A 배열 안에 M이 존재하면 1, 없으면 0 출력설계A 배열, M 배열M을 순회하며 A에 존재하는지 includes로 비교없으면 -1 대신 0 반환하도록트러블슈팅시간초과includes를 사용하니 시간 초과가 발생해서 내장함수 대신 정렬 방법을 사용해야 한다고 느낌.메모리 초과splice로 매 순회마다 새 배열을 반환하면서 메모리 초과가 발생했다...
문제 조건 분석입력: 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 20,000), 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.출력: 아래 조건에 맞게 정렬해 단어를 한 줄에 하나씩 출력길이가 짧은 것부터길이가 같으면 사전 순으로단, 중복된 단어는 하나만 남기고 제거해야 한다.설계우선 set으로 중복 제거길이로 정렬(sort 자체가 문자열로 비교해서 자연스럽게 같으면 사전 정렬될듯? ⇒ 아니라고 해서 sort compareFn에 조건 추가하는 식으로 해야 할 듯)트러블슈팅화살표 함수 특성화살표 함수는 암묵적으로 값을 반환하는 특징. 그러나 중괄호를 사용하여 여러 줄을 작성하는 경우, return 키워드를 명시적으로 사용..
문제 조건 분석입력: 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000), 둘째 줄부터 N개의 줄에 수가 주어진다. 이 수는 절댓값이 1,000,000 이하인 정수이다. 수는 중복되지 않는다.출력: 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.설계sort 활용해서 정렬하기추가 공부join() 반환값Array.prototype.join()separator로 배열 원소들을 연결한 문자열 하나가 반환된다. 만약 빈 배열에 적용하면 빈 문자열이 반환된다.Number()new를 써서 생성자로 쓰면 Number 객체를 생성한다.함수로 사용하면 원시값을 Number 타입으로 변환해준다.반환값생성자로 쓸 때 : 강제변환 프로세스를 통해 Number 객체로 변환된 값을 반환한다. ..
문제 조건 분석입력: 첫째 줄에 명령의 수 N (1 ≤ N ≤ 10,000), 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.주어지는 정수는 1~100,000. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.출력: 한 줄에 하나씩 출력스택 구현하기설계push X: 정수 X를 스택에 넣는 연산이다.pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 스택에 들어있는 정수의 개수를 출력한다.empty: 스택이 비어있으면 1, 아니면 0을 출력한다.top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.⇒ 각각 함수로 분리해서 구현하기⇒ 출력은 pop, size, e..
문제 조건 분석입력:첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다.합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.출력3장의 카드의 합이 M 이하이면서 카드의 합을 최대한 크게 만드는 것각 카드에는 양의 정수가 적혀 있다.N장의 카드 중에서 3장의 카드를 골라야 한다.플레이어가 고른 카드의 합은 딜러가 외친 숫자 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다.설계그리디로 풀 수 있나..?우선 내림차순으로 카드를 정렬합니다.순회하며 가장 큰 세 장을 더해 M을 넘는지 확인합니다.넘는다면 가장 큰 카드를 제외하고 다시 다음으로 ..
문제 조건 분석입력: T(테스트 케이스 개수), 테스트 데이터하나의 괄호 문자열의 길이는 2 이상 50 이하출력: 올바른 괄호 문자열((Valid PS, VPS)인지 여부 판단(YES/NO)설계스택 이용하기테스트케이스로 들어온 문자열 순회하며 스택에 (면 푸시, )면 팝을 진행하고 나머지가 있는지 확인하기트러블슈팅예외 처리스택을 이용해 비교할 때, 비어있는 스택에서 pop을 하도록 하면 아무 변화가 일어나지 않아서 쌍을 잘 이루는지 length로 비교할 때 오류가 생기게 되었습니다.비어있는 경우 바로 false를 반환하도록 처리했습니다.변수 초기화 위치오늘 이 실수를 계속 했는데, 특히 반복문 안에서 변수를 언제 초기화할지 잘 판단하기!여러 번 사용되는 변수를 루프 밖에서 선언하면 이전 차례에서 계산하고..
문제 조건 분석입력: 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000), 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi. (-100,000 ≤ xi, yi ≤ 100,000)좌표는 항상 정수위치가 같은 두 점은 없다.출력: 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력설계이차 배열로 입력값 받아오기이후에 sort의 compareFn을 조건에 맞게 설계다른 풀이sort 비교함수 간단하면 분리 없이 이렇게 작성해도 괜찮을 것 같다.arr.sort(function (a, b) { if (a.x - b.x == 0) { return a.y - b.y; } else { return a.x - b.x; } });코드 개선forEach로 join하지 말고 sort 비교함수에서 구조 분해 할당으로 j..
문제 분석입력값으로 받은 점수들 중 최댓값을 이용해 점수를 모두 변경해 새로운 평균을 반환하는 문제입력: 과목 개수 N, 점수들출력 : 첫째 줄에 새로운 평균 출력.실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답트러블슈팅소수점 표현(예제 참고)문제는 브론즈1에 기초적인 내용이라 금방 해결할 것으로 예상했으나, 예제를 꼼꼼히 보지 않아 여러 번 수정했습니다.조건 중에 첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다. 라는 말이 있었는데, 상대오차를 부분을 간과하고 넘어가서 생긴 실수였습니다.이후 여러 예제들 중 10-2 이하의 오차를 허용한다는 말은 정확히 소수 2번째 자리까지 출력하라는 뜻이 아니다.라는 말과 함께 아래 예..