크기가 같은 두개의 2차원 배열에서 같은 위치의 요소를 더하는 문제였다.주의할 점은 입력값을 2차원 배열로 변환하고, 다시 문자열로 바꿔야 한다는 점과 각각 요소를 더할 때 문자열이 아니라 숫자로 변환하고 더해야 한다는 점이었다. 그리고 각 행과 열의 마지막에는 빈 칸
n장의 카드를 뽑아서 m보다 크지 않은 가장 큰 숫자 조합을 만드는 문제였다.처음에 n장의 카드를 뽑아서 가장 큰 숫자를 만들기만 해도 통과가 됐었는데 생각해보니까 뽑는 카드의 순서가 상관없기 때문에 순열이 아니라 조합으로 문제를 풀어도 상관이 없었다.나의 풀이자연수
브루트포스 문제였다. 효율성이 좋지 않더라도 섣부른 최적화는 좋은 결과를 놓칠 수도 있기 마련이다.이 문제도 뭔가 더 좋은 방법이 있을 것도 같은 느낌이 들지만 브루트포스니까 처음부터 끝까지 모든 수를 확인하는 식으로 문제를 풀었다.3,5 두 수를 최소한으로 사용해서
문제 설명을 제대로 읽고 풀이를 해야한다는 것을 느끼게 했던 문제였다.처음에는 그래프 탐색을 통해서 문제를 해결하려고 했었는데 런타임 에러가 발생했다.런타임 에러의 원인을 알 수는 없지만 아마도 메모리 문제였을 것이라고 추측한다.그래서 질문하기를 통해서 다른 사람들의
이 문제는 알고리즘 풀이 자체보다 문제를 이해하는 것이 더 중요했던 문제였다.스택 자료구조를 알고 있고 문제 설명을 잘 읽었다면 큰 어려움이 없는 문제다.출처스택2: https://www.acmicpc.net/problem/28278
어떤 문자열을 뒤집어도 같다면 그 문자열을 팰린드롬이라고 한다.이 문제에서는 문자열이 주어지면 부분 문자열 중에서 가장 긴 팰린드롬을 찾고 그 길이를 출력하는 문제였다.처음엔 모든 부분 문자열을 구한 다음에 split, reverse 등의 배열 메소드를 사용해서 팰린드
초 단위로 주식 가격이 입력으로 주어졌을 때 매 초의 주식 가격이 떨어지지 않은 시간을 출력하는 문제다.처음엔 배열을 사용하면 풀 수 없을거라고 생각했었는데 다른 분의 풀이를 참고해서 배열을 이용해서 문제를 해결했다. 주식 가격의 수를 길이로 하는 배열을 생성하고, 각
약수를 구하는 방법은 여러가지가 있는데 그 중에서 3가지 방법으로 문제를 풀이해보았다.약수1~N까지 모든 수를 약수인지 확인하는 방법약수와 배수약수로 나누어 떨어지는 몫도 약수이기 때문에 같은 수로 나눈 경우가 아니라면 추가하는 방법이다. 중복 제거를 위해서 set를
'터렛' 문제는 평면에서 점 a,b의 위치가 주어지고 a,b와 c의 거리가 주어질 때 c가 될 수 있는 좌표의 수를 구하는 문제이다. 첫 번째로 시도했던 방법은 a,c / b,c의 거리를 각각 구해서 일치하는 모든 좌표들의 수를 구하는 방법이었다.가장 정확한 방법이고,
이 문제는 주어진 좌표들 중에서 해당 좌표가 몇 번째로 큰 좌표인지 물어보는 문제다.처음에 접근했던 방법은 단순하게 이중 for문을 이용해서 답안을 제출했는데 당연하게도 시간 초과가 났다.두 번째로 시도했던 방법이 정답 코드였는데 다른 사람의 풀이를 약간 참조해서 풀
요즘 매일 백준 단계별로 풀어보기를 진행하고 있는데 오늘은 최대공약수와 최대공배수에 대한 문제를 풀었다.유클리드 호제법으로 최대공약수를 구하고 그렇게 구한 최대공약수로 최대공배수를 구하는 방법들이 반복되었는데 유클리드 호제법을 이해했더라도 공식을 이해하는게 중요할 것
백준 단계별로 풀어보기에서 소수 관련 문제들을 풀었다.소수를 구하는 방법은 다양하지만 그 중에서 가장 빠른 알고리즘인 에라토네스 체에 대해서 공부했다.먼저, 소수란 1과 자기 자신을 제외한 수로는 나누어 떨어지지 않는 수를 말한다.에라토네스 체의 원리는 어떤 수의 배수
이 문제를 풀이하는데 있어서 중요한 것은 자바스크립트로 직접 큐를 구현하는 것이었다.보통 배열을 사용해서 큐처럼 사용을 하는데 배열의 shift() 메소드의 시간복잡도가 O(n)이기 때문에 시간초과가 발생한다. 때문에 이중연결리스트로 큐를 구현해서 삽입, 삭제의 시간복
N,K가 주어졌을 때 1~N을 요소로 갖는 배열을 만든 다음 K 번째에 위치하는 요소를 순차적으로 제거하는 문제다.처음에 직관적으로 K번째 요소를 제거하는 부분을 splice 배열 메소드를 사용해서 제거하는 방법으로 하려고 했었는데 매번 제거해야하는 인덱스를 설정하는
덱 자료구조는 앞에서도 뒤에서도 데이터를 삽입, 추출이 가능한 자료구조라고 할 수 있다.자바스크립트에서 배열을 사용해서 쉽게 구현할 수 있지만 삽입, 추출에 시간복잡도가 O(n)으로 입력값이 많아진다면 시간 초과가 발생할 수 있다. 나의 경우에는 연결리스트를 통해서 덱
이 문제는 유니온파인드와 최소신장트리 알그리즘인 크루칼 알고리즘을 알고 있다면 쉽게 해결할 수 있는 문제다. 문제에서 주어진 노드와 노드 사이의 다리를 연결하는 비용이 주어지고, 모든 노드를 연결하는 다리를 건설하는데 비용을 최소로 하는 길을 만드는 문제다.따라서 크루
N개의 물건에 대한 무게 W와 가치 V가 주어졌을 때 배낭에 넣을 수 있는 최대 무게 K가 주어질 때 배낭에 들어갈 수 있는 물건의 가치 최댓값을 구하는 문제다.이 문제는 DP 냅색 알고리즘을 사용하는 대표적인 문제다. DFS로 시도를 해봤지만 시간초과가 발생했다.먼저
모든 트럭이 다리를 건너려면 몇 초가 걸리는지 알아내야 하는 문제다리를 지나가는 트럭의 무게를 견뎌낼 수 있는 제한이 있고, 트럭이 최대 올라갈 수 있는 제한이 있다.대기중인 트럭은 1초에 한대 씩 다리에 트럭이 올라갈 수 있고 다리에 있는 트럭은 1초에 length
가중치가 없는 그래프 탐색 문제다. 노드, 간선정보, 시작 노드 정보가 주어졌을 때 DFS와 BFS의 경로를 찍는 문제다. DFS와 BFS를 사용했을 때 탐색 경로를 정확하게 이해하고 있었다면 쉽게 풀 수 있었을텐데 습관적으로 풀던 방식을 암기해서 풀다보니 시간이 오래
문제 설명 도둑이 마을의 집을 털려고 한다. 마을의 집은 원의 형태로 처음 집과 끝 집이 이어진 형태로 위치하고 있다. 마을에는 특이한 방범 시스템이 있는데 인접한 집을 털면 경보가 울리게 된다. 도둑은 이 사실을 알고 있어서 인접한 집을 털지 않고 최대한 많은 돈을
라이언과 어피치가 양궁대회에 참여했다. 어피치는 이미 화살을 쏜 상태고 어피치가 쏜 화살의 수와 점수가 주어진다. 점수를 매기는 조건에 따라 라이언이 이길 수 있는 경우 중 어피치와의 점수 차가 최대가 되는 경우를 출력하면 된다. 점수 차가 최대가 되는 경우가 여러 개
1부터 N까지 N개의 마을이 있다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있다. 어떤 마을에서 다른 마을로 이동할 때 걸리는 시간이 주어지고, 음식을 배달할 수 있는 최대 시간 K가 주어진다. 마을 간 이동시간 정보 road와 최대 시간 K가 주어졌을
정수로 이루어진 배열 numbers가 주어진다. 배열 내에서 각 원소들 보다 뒤에 있는 숫자 중에서 큰 숫자를 뒤에 있는 큰 수라고 한다. 각 요소들을 뒤에 있는 큰 수로 변환해서 출력하는데, 만약 배열 내에서 각 요소들 보다 뒤에 있는 숫자들 중에 큰 수가 없는 경우