나이 구하기 숫자 비교하기 짝수의 합 각도기 아직까진 어려운 부분은 없었다. 어떻게 하면 코드가 더 간결하고 가독성이 좋아질 수 있을까라는 생각중이다.
양꼬치피자나눠먹기(1)피자나눠먹기(3)점의 위치 구하기아이스 아메리카노옷가게 할인받기제곱수 판별하기✏️ 제곱수 판별하기는 생각하는 데 꽤 시간이 걸렸다. 다른 분들은 Math.sqrt()라는 함수를 써서 구현하셔서 그런 함수가 있다는 걸 알게되었다.Math.sqrt(n
문자열 뒤집기 my_string을 거꾸로 뒤집은 문자열을 return해라. 특정 문자 제거하기 문자열 my_string과 문자 letter이 매개변수로 주어진다. my_string에서 letter를 제거한 문자열을 return해라. 문자 반복 출력하기 문자열 my_string과 정수 n이 매개변수로 주어질 때, my_strin...
중복된 숫자 개수 정수가 담긴 배열 array와 정수 n이 매개변수로 주어질 때, array에 n이 몇 개 있는 지를 return해라. 배열의 평균값 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return해라. 짝수
머쓱이보다 키 큰 사람머쓱이는 학교에서 키 순으로 줄을 설 때 몇 번째로 서야 하는지 궁금해졌습니다. 머쓱이네 반 친구들의 키가 담긴 정수 배열 array와 머쓱이의 키 height가 매개변수로 주어질 때, 머쓱이보다 키 큰 사람 수를 return해라.배열 두배 만들기
자릿수 더하기 정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return해라 순서쌍의 개수(상) 순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return해라 개미군단(상) 개미 군단이 사냥을 나가려고 합...
테스트케이스 개수 T입력정수 갯수 입력(수첩1)정수들 띄어쓰기로 입력정수 갯수 입력(수첩2)정수들 띄어쓰기로 입력(수첩1의 값과 비교)이렇게 푸니 시간초과가 났다. ArrayList로 해서 앞에서 부터 차례로 전부 비교해서 시간이 오래걸리는 거 같다. 그래서 검색해보니
순열(Permutation) 순서를 정해서 나열 서로 다른 n개 중에 r개를 선택하는 경우의 수(순서 O, 중복 X) 예시) 5명을 3줄로 세우는 방법, 서로 다른 4명이 반장, 부반장을 뽑는 방법 중복 순열 서로 다른 n개 중에 r개를 선택하는 경우의 수(순서
문제 1 / ReverseSentence solution : 구분자인(.), (,), (!), (?), ( )를 기준으로 단어를 구분해 각 단어를 거꾸로 뒤집어 모은 문자열 배열을 출력하는 프로그램 작성 s.replaceAll("["+regex+"]", " ") 이
시간 복잡도란? 알고리즘의 성능을 나타내는 지표로, 입력 크기에 대한 연산 횟수의 상한을 의미한다. ※ 시간 복잡도는 주로 빅오 표기법을 사용해 나타낸다. 빅오(Big-O) 표기법 최악의 상황으로 연산량을 계산하는 표기법 "이 정도 시간이 걸린다"보다는 "이 정도
문제 1 / Bracket 목표 : (, ), {, }, [, ], `` 4가지 종류 괄호가 서로 교차하지 않은 형태로 짝이 맞게 이루어진 문자열이면 1, 틀리면 0을 반환 해결방법 : 문자가 열린 괄호면 stack에 채워주고 다음 들어오는 괄호가 stack에 있는
목표 : n개의 이진수 모두 XOR 연산해서 십진수로 출력해결방법 : 처음 나오는 이진수로 배열을 돌며 하나씩 전체를 XOR한 결과를 출력했다.목표 : 양의 약수를 구하기해결방법 : 자기 자신이 아닌 약수의 최댓값은 절반이니 절반까지 for문으로 약수를 구하고 자기 자
목표 : 중복된 단어 제외한 단어의 수 출력해결방법 : Set을 이용했다.목표 : 두배열의 교집합 구하기해결방법 : List 이용해서 교집합을 구해줬다.목표 : 목적지까지 k이하의 정수로 도착할 때 직전 사용했던 숫자 연속으로 사용하지 않고 도착하는 경우의 수 구하기해
계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다.가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학
해시 테이블 키(key), 값(value)을 대응시켜 저장하는 데이터 구조 키를 통해 해당 데이터 빠르게 접근 가능 해싱 - 키를 특정 계산식에 넣어 나온 결과를 사용하여 값에 접근하는 과정 구조 키 : 해시 테이블 접근을 위한 입력 값 해시 함수 : 키를 해시
문제 설명 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게
트리(Tree) 노드와 링크로 구성된 자료구조(그래프의 일종, Cycle 없음) 계층적 구조 나타낼 때 사용 폴더 구조(디렉토리, 서브 디렉토리) 조직도, 가계도 등 구조 > 노드(Node) : 트리 구조의 자료 값을 담고 있는 단위 엣지(Edge) : 노드
문제 1 / 제로 카페의 비결 목표 : 주문을 모두 처리하기 위해 사용되는 원두의 양을 구하기 해결방법 : 원두의 양 = 원두의 산미(1+에스프레소 샷) 으로 원두의 양을 구할 수 있다. 이 때 n_coffee개를 만들면 원두의 산미를 2를 한다. 단, 산미 > 1
거리두기 확인하기 문제 설명 개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다. 코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼 아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다. > 대기
문제 1 / 제로 카드 게임 목표 : 카드 더미에서 두 그룹이 가진 카드의 합의 차이가 가장 작은 패널티를 구하기 해결방법 : 부분 집합의 합을 두 그룹으로 나눠 구해서 풀었다. 카드 갯수가 0개에서 2개까진 빠르게 구해줄 수 있어서 빠르게 계산해 리턴해줬다.
목표 : N명의 중 가장 큰 점수와 가장 작은 점수의 차이 구하기해결방법 : max값과 min값을 찾아 구해줬다.목표 : 예약 시간을 비교해 받을 수 있는 최대 예약의 수 구하기해결방법 : 예약의 끝 시간이 다음 예약의 시작 시간이상일 때 예약의 수를 카운팅해준다고 생
문제 1 / 회전 방어 목표 : N초 동안 차감되는 점수의 합이 최솟값을 구하기 해결방법 : 매 라운드 마다 현재 바라보는 방향에 따라 가해지는 피해량이 달라지므로 공격 방향을 선택하여 누적 피해를 최소화 하도록 다이나믹 프로그래밍을 이용해 해결했다. enemie
문제 1 / 여행가의 등산 목표 : (1, 1) -> (N, N) 까지 이동하는 최소 체력소모 구하기 해결방법 : BFS로 풀었다. 시작점은 0이고 나머지 부분들엔 0이상 100이하의 이동 체력 소모 값이 있다. 우선순위로 체력 소모가 덜 되는 순서로 만들어서 (N
정렬 알고리즘 데이터를 특정한 기준에 따라 순서대로 정렬하는 알고리즘 특징 시간 복잡도 : 일부 알고리즘은 작은 데이터 집합에 대해 빠르지만, 큰 데이터 집합에 대해 느릴 수 있다. 알고리즘의 시간 복잡도를 고려하여 적절한 정렬 알고리즘을 선택해야 한다. 안정성 :안
수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오.예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.
다익스트라(Dijkstra) 출발점에서 목표점까지의 최단 경로를 구하는 알고리즘 한 노드에서 다른 모든 노드로의 최단 경로를 구할 수 있음 간선에 음의 가중치가 없어야 함 그리디 + DP 형태 방문하지 않은 노드 중에서 가장 비용이 적은 노드 선택(그리디) 해
동적계획법 (DP:Dynamic Programming) 복잡한 문제를 작은 하위 문제로 나누어 푸는 알고리즘 기법 큰 문제를 부분 문제로 나눈 후 답을 찾아내는 과정에서, 계산된 결과를 기록하고 재활용하며 문제의 답을 구하는 방식 중간 계산 결과를 기록하기 위한 메모리
벨만-포드(Bellman-Ford) 알고리즘 출발점에서 목표점까지의 최단 경로를 구하는 알고리즘 음수 간선이 포함되어 있어도 최단 경로 구할 수 있음 음수 싸이클이 있으면 정상 동작하지 않음 매번 모든 간선을 확인하기 때문에 다익스트라에 비해 느림 시간 복잡도 :
아기 상어 문제 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기
목표 : 연속으로 배치된 카드 중 인접한 2개의 카드가 앞(1)일 때 뒤(0)로 뒤집는 게임이다.이 게임에서 내가 반드시 승리할 수 있는지 여부를 출력한다.해결방법 : 연속된 1의 구간을 분리해 메모이제이션을 활용해 풀었다.연속된 구간 분리카드 배열에서 연속된 1의 구
압축 문제 설명 신입사원 어피치는 카카오톡으로 전송되는 메시지를 압축하여 전송 효율을 높이는 업무를 맡게 되었다. 메시지를 압축하더라도 전달되는 정보가 바뀌어서는 안 되므로, 압축 전의 정보를 완벽하게 복원 가능한 무손실 압축 알고리즘을 구현하기로 했다. 어피치는
나머지 합 (백준 10986) 문제 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (
카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다.신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을
target을 만들 때 아래 4가지 동작을 조합/반복해서 만들어야한다.바가지에 물을 가득 채운다.바가지의 물을 비운다.한 바가지에서 다른 바가지가 가득 찰 때 까지 옮겨 담는다.한 바가지가 빌 때 까지 다른 바가지에 옮겨 담는다.그래서 두 개의 gcd를 구해서 gcd의
땅따먹기 문제 설명 땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟으면서 내려와야 합니다. 단, 땅따먹기 게임에
뒤에 있는 큰 수 찾기 문제 설명 정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다. 정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대
각 사람의 순 입출금 잔액을 계산해서 map에 저장잔액이 0이 아닌 사람들만 추려 List로 구성DFS + 백트래킹을 이용하여 상쇄시킬 수 있는 사람끼리 거래를 시도하며 최소 거래 횟수를 계산코드길이 비교로 케이스 분리길이가 같을 경우: 수정 1회 가능 -> 문자 비교
자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.x에 n을 더합니다x에 2를 곱합니다.x에 3을 곱합니다.자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수
플로이드-워셜(Floyd-Warshall) 알고리즘 모든 노드 간의 최단 경로를 구하는 알고리즘 음의 간선이 포함되어 있어도 사용 가능 음수 싸이클이 있으면 정상동작 하지 않음 다익스트라는 출발점이 한 개로 정해져있고 플로이드-워셜을 출발점이 정해져있지 않고 모
BFS (Breadth-First Search) - 너비 우선 탐색 BFS는 이름 그대로 너비를 우선으로 탐색하는 알고리즘이다. 출발 노드에서 시작해 인접한 노드들을 먼저 탐색하고 그다음 인접 노드들의 인접 노드들을 탐색해 나가는 구조다. 이렇게 하면 출발 노드로부터
DFS는 그래프 탐색 알고리즘 중 하나로, 가능한 한 깊게 내려가면서 탐색한 후, 막히면 뒤로 돌아와 다른 경로를 탐색하는 방식이다.
이분 탐색(Binary Search)은 정렬된 배열에서 원하는 값을 O(log N) 시간에 빠르게 찾는 알고리즘이다. 배열을 절반씩 나누면서 탐색하기 때문에 선형 탐색(O(N))보다 훨씬 빠르다.핵심 조건1\. 탐색할 데이터가 정렬되어 있어야 한다2\. 범위를 반씩 줄
투포인터(Two Pointers)란 배열이나 리스트와 같은 선형 자료구조에서 두 개의 포인터를 사용해 문제를 효율적으로 푸는 알고리즘 기법이다. 주로 정렬된 배열이나 연속 구간 문제에서 사용되며 O(N^2)의 완전 탐색을 O(N) 또는 O(N log N)으로 최적화할
Greedy(탐욕) 알고리즘은 현재 상황에서 가장 좋아 보이는 선택을 반복하며 문제를 해결하는 알고리즘이다. 말 그대로 “눈앞의 이익을 최우선으로 하는 전략”을 사용한다.즉, 매 순간 최적이라고 생각되는 선택을 하고 이 선택들이 쌓여서 결국 전역 최적해(Global O
유클리드 호제법(Euclidean Algorithm)은 두 수의 최대공약수(GCD, Greatest Common Divisor)를 효율적으로 구하는 알고리즘이다. 고대 그리스 수학자 유클리드(Euclid)의 이름을 따왔으며 큰 수를 작은 수로 나눈 나머지를 반복해서 0
시뮬레이션(Simulation) 알고리즘은 문제에서 주어진 조건을 코드로 그대로 구현하며 상태를 변화시키는 방식으로 문제를 해결하는 알고리즘이다. 말 그대로 “문제의 상황을 그대로 재현해보는 전략”이다.즉, 상황을 한 단계씩 따라가면서 시뮬레이션처럼 구현하고 그 과정에
복잡한 문제를 마주했을 때 정해진 알고리즘 없이 상황에 맞게 직접 로직을 구현해 문제를 해결하는 방식이 바로 애드혹(Ad-hoc) 알고리즘이다. 일반적인 정렬, 이분 탐색, DP, 그래프 탐색 등과는 다르게 애드혹은 특정 문제에 특화된 방식으로 맞춤형 해결법을 구현하는
그래프 이론에서 모든 정점을 연결하면서 간선의 가중치 합이 최소가 되는 트리를 말한다. Spanning Tree(신장 트리): 그래프의 모든 정점을 포함하고 사이클이 없는 부분 그래프 Minimum: 가능한 모든 신장 트리 중 가중치 합이 최소인 트리 즉 네트워크
분할 정복은 문제를 더 작은 하위 문제로 분할(Divide)하고, 각각을 독립적으로 정복(Conquer)한 뒤 다시 결합(Combine)하여 원래 문제의 해답을 구하는 알고리즘 설계 기법이다. 복잡한 문제를 직접 풀기보다는 작고 단순한 문제들의 해를 구해서 합치는 방식
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/258705풀이를 참고할 때 카카오 풀이를 참고해서 풀었다.