https://www.acmicpc.net/problem/108281)처음에는 command를 str로 받아서 슬라이싱을 통해 명령어(push, pop 등)를 구분하려고 했다. 풀면서도 명령어의 길이가 다 다르고 push 같은 명령어는 원소도 같이 입력을 받기
https://www.acmicpc.net/problem/9093각 단어를 어떻게 뒤집냐(슬라이싱, reverse() 메서드 등)의 차이만 있지, 대부분의 사람들이 비슷하게 문제를 푼 것 같다.join() 메서드를 활용해보고 싶어서 다른 코드도 작성해 보았다.
23년 3월 29일(수)https://www.acmicpc.net/problem/9012처음에는 flag == False인 경우만 NO에 해당된다고 생각했다. 그런데 check_list에 '('가 ')'보다 많이 포함된 경우, 두 번째 for문-else에 걸리
23년 3월 30일(목)https://www.acmicpc.net/problem/1874문제를 이해하는 데 시간이 조금 걸렸다.내가 이해한 바로는,사용자 입력 n에 대해 1부터 n까지의 정수가 stack에 저장될 수 있는 숫자이다. (중복 X)그리고 사용자 입
23년 7월 24일(월) 문제 https://www.acmicpc.net/problem/1406 코드 문제를 이해하는 데 시간이 조금 걸렸다. 내가 이해한 바로는, 사용자 입력 n에 대해 1부터 n까지의 정수가 stack에 저장될 수 있는 숫자이다. (중복 X)
23년 7월 24일(월) 문제 https://www.acmicpc.net/problem/10845 코드 기타 Queue의 기본 연산을 리스트로 구현하는 문제라 크게 어렵지 않았다.
23년 7월 25일(화)https://www.acmicpc.net/problem/10866cmd = list(sys.stdin.readline().rstrip().split(" "))
23년 7월 25일(화)https://www.acmicpc.net/problem/10799처음에 괄호의 짝을 확인해야 한다고 생각했고, 문제를 어렵게 받아들였다.근데 입력 자체가 괄호의 짝이 맞게 주어지기 때문에 이 부분은 고려할 필요가 없다.그렇다면 레이저가
23년 7월 29일(토)https://www.acmicpc.net/problem/17413태그 안에도 공백(' ')이 존재할 수 있다는 조건 때문에 어려움을 느꼈다.이 부분은 tag라는 boolean 변수로 해결할 수 있었다.만약 tag = True이면, 현재
23년 7월 30일(일)https://www.acmicpc.net/problem/17298처음 작성한 코드는 다음과 같다. 시간 복잡도를 고려하지 않고, 올바른 출력만 고려해서 작성했기에 시간 초과가 떴다.정답 코드는 아래와 같다.첫 골드 문제였다.파이썬에서
23년 8월 2일(수)https://www.acmicpc.net/problem/1935피연산자는 무조건 A, B, C, ..와 같이 알파벳 순서로 주어진다! 따라서 ord(e) - ord('A')를 통해 주어진 몇 번째 operand인지 알 수 있다.후위 표기
23년 8월 3일(목)https://www.acmicpc.net/problem/1463N = 1, 2, 3일 때의 값을 알기 때문에 DP 상향식으로 접근했다.1을 빼는 연산이 연산 횟수를 최소화 하는 연산이라 가정하고 dpi에 dpi - 1 + 1을 저장한다.
빈칸 없는 1자 이상 15자 이하의 글자가 5줄로 주어질 때,각 글자를 세로로 읽어 공백 없이 출력하는 문제이다.(글자는 'A'~'Z', 'a'~'z', '0'~'9'의 조합으로 구성된다.)아래와 같이 모든 글자의 길이가 같은 경우도 있지만,아래와 같이 모든 글자의 길

병사 수(n)와 각 병사의 전투력(strengths)이 주어질 때,최소한으로 병사를 열외시켜 남아있는 병사의 전투력이 내림차순이 되도록 해야 한다.감소하는 가장 긴 부분 수열의 길이가 남아있는 최대 병사 수이므로,strengths를 순서대로 탐색하면서..1) 현재 st
n개의 정수, m개의 정수가 주어질 때,m개의 정수 각각이 n개의 정수에 포함되어 있는지 출력(0 또는 1)하는 문제이다.단순하게 생각하면..m개의 정수가 n개의 정수가 포함된 리스트에 존재하는지 확인하면 되고,코드는 다음과 같다.이렇게 하면 시간 초과가 뜬다..!직후
n개의 2차원 좌표를 y-좌표 오름차순, x-좌표 오름차순으로 정렬하는 문제이다.sort() 메서드와 람다 함수를 통해 쉽게 풀 수 있다.코드는 다음과 같다.다른 풀이, chatGPT를 참고하는 과정에서 정렬된 좌표를 출력할 때 반복 변수 i를 쓰지 않아도 되는 for
n명의 학번이 주어지고, n명의 학생을 구분할 수 있는 학번의 최소 길이를 구하는 문제이다.(단, 주어지는 학번의 길이는 모두 같다.)학번 자체는 주어지는 값이다.따라서 학번 뒷자리부터 하나씩 늘려가며, 같은 값이 존재하지 않을 때의 학번 길이를 출력하면 된다.학번은
n개의 파일이 주어질 때, 파일의 확장자 이름과 그 확장자에 해당되는 파일의 개수를 출력하는 문제이다.file이 'name.extension' 형태라고 가정하면,split() 메서드를 이용하여 각 확장자에 해당되는 파일 개수를 쉽게 파악할 수 있다.여기서 딕셔너리 자료
방향 없는 그래프가 주어졌을 때, 연결 요소의 개수를 구하는 문제이다.dfs를 떠올렸고, 노드를 순차적으로 탐색하면서 만약 해당 노드가 방문되지 않았다면 해당 노드를 방문 처리하고, dfs를 통해 해당 노드와 연결된 노드 중 방문 처리되지 않은 노드를 방문 처리한다.
a = 1, 2, 3b = 2, 1, 3c = 1, 2, 3print(a == b) // falseprint(a == c) // true
https://www.acmicpc.net/problem/1260bfs, dfs의 개념 문제인데, 두 알고리즘의 개념도 제대로 모르고 따로 문제를 풀어보지도 않았기 때문에 아래 블로그를 참고해서 문제를 풀었다.그래도 마냥 어렵게만 느껴지던 내용이 조금씩 이해가
https://www.acmicpc.net/problem/1018코드를 작성하진 못했고, 떠올린 아이디어는 다음과 같다.가능한 8X8 체스판은 총 2개이다. 'WBWBWBWB', 'BWBWBWBW' 4 'BWBWBWBW', 'WBWBWBWB' 4
https://www.acmicpc.net/problem/11718틀렸다.브론즈라고 무시하지 말고, 겸손하자.(실제 정답률도 40% 밑..)문제를 읽고,사용자 입력으로 '\\n'가 들어온 경우만 출력을 종료하면 된다고 생각했다.내가 제출한 풀이는 다음과 같다.
길이가 모두 같고, 알파벳과 '.'으로 이루어진 문자열들의 공통 패턴을 찾는 문제이다.가능하면 '?'을 적게 써야 한다는 조건은.. 주어진 문자열들의 공통된 부분을 최대로 찾아서 패턴을 만들어야 한다는 의미이다.주어진 모든 문자열을 일일이 비교해야 하므로 첫 번째로 주
파이썬의 sort()와 람다 함수를 활용하면 쉽게 풀 수 있다.https://kingofbackend.tistory.com/98
https://www.acmicpc.net/problem/10814야심차게 풀었다가 틀렸다.처음 제출한 코드는 아래와 같다.디버깅 과정에서..영어 소문자(a=97~), 대문자(A=65~)의 아스키 코드 값 크기가 반대이니까, 소문자로 사용자 이름을 저장한 뒤
https://www.acmicpc.net/problem/10817A, B, C를 각각 받아 크기를 비교해도 되지만,리스트로 한 번에 입력 받은 뒤 정렬해서 중간 값을 출력했다.
입력 받은 문자열 뒤에 '??!'를 붙여서 출력하면 된다.
https://www.acmicpc.net/problem/2525초등부 1번 문제.. 쉽다기보다는 단순 구현 문제이다.분(B) + 요리 시간(C)을 계산해서 60으로 나눈 몫은 시간으로, 나머지는 분으로 쓴다.시간(A) + 분에서 넘어온 값은 24로 나눈 나머
https://www.acmicpc.net/problem/10813어렵진 않았다. 근데 주의할 점은 있었다.처음엔 for문을 두 번 썼다.for문으로 사용자 입력을 리스트에 저장한 뒤, 다시 for문을 돌리면서 스왑했다.근데 굳이 메모리랑 코드를 더 짤 필요
시간 초과!주어진 2차원 배열의 (i, j)부터 (x, y)까지의 합을 구하는 것이므로,더하고자 하는 부분은 항상 직사각형 형태이다.이 사실을 이용하면..리스트 슬라이싱을 통해 위 코드의 시간 초과 원인인 이중 for문을 없앨 수 있다.코드(정답)는 다음과 같다.
n X m 크기의 배열(미로)이 주어질 때,우측 상단 (0, 0)에서 좌측 하단 (n - 1, m - 1)까지의 최단 이동 횟수를 출력하는 문제이다.2차원 배열, 그래프 문제이기 때문에 DFS/BFS를 사용하면 되는데..최단 거리와 관련되어 있으므로 BFS로 접근하면
0 이상 500 이하의 정수 n이 주어질 때, n!의 일의 자리부터 연속되는 0의 개수를 구하는 문제이다. n!을 문자열로 변환한 뒤, 조건문을 통해 0의 개수를 세는 방법을 떠올렸다. 파이썬에서 팩토리얼을 계산할 수 있는 방법은.. 반복문, 재귀 함수, 내장 함수

중복 없는 n개의 문자열이 담긴 집합 s가 주어질 때,m개의 문자열 중 집합 s에 포함된 문자열의 개수를 구하는 문제이다.중복이 없기 때문에 리스트와 for문으로 쉽게 해결할 수 있다.코드(정답)는 다음과 같다.파이썬에서 리스트보다 집합(Set), 딕셔너리(Dictio
과목, 학점, 성적이 주어질 때,주어진 식에 따라 평균 평점을 계산하는 문제이다.과목은 필요한 정보가 아니므로,split()을 통해 학점과 성적만 사용하면 된다.그리고 'A+'와 같은 성적을 실수 값 형태의 성적으로 바꾸는 것은,딕셔너리를 사용하면 쉽게 변환 가능하다.
중복 없는 n개의 재료 번호가 주어질 때,두 재료의 합이 m이 되는 경우의 개수를 구하는 문제이다.리스트의 두 원소의 합을 고려하는 문제라..투 포인터 알고리즘을 사용했다.입력 받은 재료 번호를 크기 순서대로 정렬한 뒤,left, right라는 포인터를 통해,두 재료
Rev(x)가 어떤 수 x의 모든 자리를 역순으로 만드는 함수일 때,Rev(Rev(x) + Rev(y))를 구하는 문제이다.정수형(int)으로 수를 뒤집는 것보다..문자형(str)으로 수를 뒤집는 게 훨씬 간단하다.다만 문자열로 수를 뒤집고 난 뒤,0으로 끝나는 값들을
땅에 존재하는 연속된 배추 묶음의 개수를 구하는 문제이다.2차원 배열 문제라 바로 DFS/BFS를 떠올렸고,DFS의 기본적인 틀만 생각해서 문제를 풀었다.코드(정답)는 다음과 같다.2차원 배열에서의 인덱스와 좌표평면에서의 2차원 좌표가 다르기 때문에,그래프 문제에선 이
n개의 정수로 이루어진 수열이 주어질 때,1개 이상의 연속된 숫자 합 중 최댓값을 구하는 문제이다.'dpi: i번째 원소까지의, 연속된 부분 합의 최댓값'이라 정의하자.간단한 예시는 다음과 같다.dp0은 항상 nums0이므로 여기선 -1이다.dp1은..1번째 원소까지의
m개의 정수 각각에 대해,상근이가 갖고 있는 값이면 1, 그렇지 않다면 0을 출력하는 문제이다.이진 탐색이 가장 먼저 생각이 났고,상근이 카드 목록을 정렬한 뒤 따로 이진 탐색 함수를 구현해서 풀었다.코드(정답)는 다음과 같다.다른 분들의 풀이를 참고하다..딕셔너리로도
0과 1로 구성된 n X n 크기의 지도가 주어질 때,연속된 1의 묶음 수(단지 수)와 각 묶음에 포함된 1의 개수(집 수)를 구하는 문제이다.전형적인 그래프 탐색 문제라고 생각했고 DFS로 풀었다.주의할 점이 있다면..1) 문자열은 변경 불가(immutable)하므로
가장 많이 팔린 책 중,사전 순서에서 가장 앞서는 책의 제목을 출력하는 문제이다.책이 팔린 순서대로 책의 제목이 주어지기 때문에,책의 제목을 key, 팔린 개수를 value로 하는 딕셔너리로 접근했다.그리고 value의 최댓값을 통해,베스트 셀러에 해당되는 책의 제목만
R, G, B로 이뤄진 n X n 그래프가 주어질 때,R, G, B 3가지로 구분된 영역의 개수와,R/G, B 2가지로 구분된 영역의 개수를 구하는 문제이다.그래프 탐색이라 DFS로 풀었다.지금까지 풀었던 DFS와 다른 점이라 하면..0과 1 같은 2개의 값으로 구성된
ENTER라는 입력을 기준으로,각 구간에 포함된 사람의 수를 구하는 문제이다.이때 각 구간에 중복으로 나오는 사람이 있다면 1명으로 생각한다.n만큼 닉네임을 입력 받으면서..1) 입력이 ENTER라면, 1-1) 현재 구간(messages)에 포함된 중복 없는 사람의 수
정렬된 2개의 배열이 주어질 때,두 배열을 합치고 정렬해서 원소 값을 출력하는 문제이다.sorted()를 사용해도 풀 수 있다.시간 제한에 걸리지 않기 때문이다.각 배열의 최대 크기는 10^6개이므로,두 배열의 합친 배열의 최대 크기는 2\*(10^6)개이다.그리고 s
https://velog.io/@jeonghens/%EB%B0%B1%EC%A4%80-11728위의 문제에 대한 투 포인터 풀이는 아래와 같다.먼저 각 배열에 대한 포인터(p_a, p_b)를 선언한다.그리고 각 포인터가 가리키는 값을 비교하여,더 작은 값을 정답
m X n 상자에 들어있는 토마토의 상태(-1 또는 0 또는 1)가 주어질 때,모든 토마토가 익게 되는 최소 일수를 구하는 문제이다.아직 익지 않은 토마토는,본인의 상하좌우에 있는 익은 토마토에 의해서만 익을 수 있다.아래와 같이 BFS로 접근했다.1) 익은 토마토의
수빈이와 동생의 위치가 주어지고,수빈이가 현재 위치 X에 대해 X - 1, X + 1, 2 \* X로 이동 가능할 때,수빈이가 동생의 위치로 가는 가장 빠른 시간을 구하는 문제이다.처음에는 2 \* X를 최대한 활용하고,X - 1, X + 1로 세부 거리를 조정하는 방
자르기만 가능한 랜선 K개의 길이가 주어진다.똑같은 길이로 N개의 랜선을 만들 때, 이 랜선의 최대 길이(정수)를 구하는 문제이다.랜선 길이가 될 수 있는 값은 1부터 max(lan)이다.max()가 상한 값인 이유는 자를 수 있는 랜선의 최대 길이를 구하는 문제이기
n개의 집 좌표(1차원)가 주어진다.n개의 집에 공유기 c개를 설치할 때, 인접한 공유기의 최대 거리를 찾는 문제이다.인접 공유기의 최소 거리는 1부터 시작할 테고,최대 거리는 양 끝 좌표의 거리부터 줄어들 것이다.그래서 이 두 값 사이의 값 중,문제의 조건을 만족하는
크기 n(1 이상 1000 이하)인 수열이 주어질 때,가장 긴 증가하는 부분 수열의 길이를 구하는 문제이다.dpi를 i번째 원소까지 가장 긴 부분 수열의 길이라 정의하자.dpi를 구하려면..어찌되었건 수열의 0번째 원소부터 (i - 1)번째 원소를 순차적으로 탐색해야
백준 11053과 똑같은 문제이다.주어진 수열에서 가장 긴 증가하는 부분 수열의 길이를 구하면 된다.그런데 DP로 접근한 가장 긴 증가하는 부분 수열(11053) 풀이를 그대로 제출하면..시간 초과가 뜬다.입력 값의 범위가 다르기 때문이다.이 문제는 입력의 최댓값이 1
n개의 정수가 주어질 때,산술 평균, 중앙값, 최빈값, 범위를 구하는 문제이다.산술 평균정수 n개의 합을 n으로 나누면 된다.소수 첫째 자리에서 반올림하여 정수 형태로 값을 출력해야 하는데,round()는 가장 가까운 값에 따라 짝수로 반올림(round half to
https://www.acmicpc.net/problem/2798블랙잭은 카드의 합이 21을 넘지 않는 범위에서,카드의 합을 최대한 크게 만드는 게임이다.이 문제에선 주어진 정렬되지 않은 n장의 카드에 대해,m을 넘지 않는, m에 가장 가까운 카드 3장의 합을
https://www.acmicpc.net/problem/1018검은색(B)과 흰색(W)로 칠해진 M x N 크기의 체스판이 주어진다.주어진 체스판을 잘라 8 x 8 크기의 체스판으로 만들려고 하는데,이웃한 변이 서로 다른 색이어야 한다.이때, 지민이가 다시
https://www.acmicpc.net/problem/11070~9 중 고장난 버튼이 주어질 때,현재 채널(100번)에서 원하는 채널(n번)로 이동하기 위한 최소 횟수를 구하는 문제이다.정상 채널의 최대 번호가 500,000번이므로,완전 탐색을 고려해 볼
https://www.acmicpc.net/problem/14888N개의 정수, N - 1개의 연산자가 주어질 때,만들 수 있는 식의 결과의 최댓값과 최솟값을 구하는 문제이다.고려해야 할 문제의 조건은 다음과 같다.연산자 우선 순위는 무시되며, 앞에서부터 순서
https://www.acmicpc.net/problem/1475플라스틱 숫자 한 세트에는 0부터 9까지의 숫자가 하나씩 들어있다.그리고 6과 9는 각각 뒤집어서 9와 6으로 사용할 수 있다.어차피 6과 9를 제외한 나머지 숫자는 존재하는 개수만큼 세트를 사야
https://www.acmicpc.net/problem/5622숫자로 된 번호가 주어질 때,그 번호를 다 누르기 위한 최소 시간을 구하는 문제이다.하나의 번호를 누르면 다시 처음 위치로 돌아가기 때문에,최소 시간은 번호를 실수 없이 누르는 단순한 상황이라고
https://www.acmicpc.net/problem/2490
https://www.acmicpc.net/problem/11478알파벳 소문자로만 이루어진, 길이 1,000 이하의 문자열이 하나 주어진다.이때 주어진 문자열의 서로 다른 부분 문자열의 개수를 구하는 문제이다.중복되는 부분 문자열은 길이가 같은 부분 문자열에

그래프 문제이므로 BFS/DFS를 떠올릴 수 있고,모든 도로의 거리가 1이므로 BFS로 최단 거리를 찾을 수 있다.
백준 영단어 암기는 괴로워 문제 풀이이다.입력된 n개의 단어에 대해 아래의 조건을 만족시키도록 단어를 출력해야 한다.1 단어의 길이가 m 이상인 단어만 고려한다.2 자주 나오는 단어일수록 앞에 배치한다. (빈도)3 단어의 길이가 길수록 앞에 배치한다.4 알파벳 사전 순
백준 창고 다각형 문제 풀이이다.n개의 직사각형 기둥(폭은 모두 1m)으로 구성된 창고의 지붕을 만들 때, 옆에서 바라본 창고 다각형의 면적의 최솟값을 구하는 문제이다.지붕을 만드는 5가지 조건은 다음과 같다.1 지붕은 수평 부분과 수직 부분으로 구성되며, 모두 연결되
백준 최소 힙 문제 풀이이다.최소 힙(Min Heap)이라는 자료 구조를 이용하여, 아래의 두 연산을 지원하는 프로그램을 만들어야 한다.1 배열에 자연수 x(231보다 작은 자연수 또는 0)를 넣는다.2 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다.이
백준 카드2 문제 풀이이다.아래의 두 행위를 카드가 1장 남을 때까지 반복할 때, 그 1장의 번호를 출력하는 문제이다.1 제일 위에 있는 카드를 바닥에 버린다.2 뒤이어 제일 위에 있는 카드를 제일 아래로 옮긴다.아래는 시간 복잡도를 고려하지 않고, 문제에서 시키는 대
백준 삼각형과 세 변 문제 풀이이다.삼각형의 세 변의 길이가 주어질 때, 세 변의 관계에 맞는 정의를 출력하는 문제이다.총 5가지 경우가 있는데, 아래와 같은 순서로 분기 처리했다.먼저 프로그램 종료 조건인, 세 변의 길이가 모두 0으로 주어지는 경우를 처리했다.그리고
백준 예산 문제 풀이이다.국가 예산(m)과 각 지방의 예산 요청이 주어질 때, 실제 배정된 예산들 중 최댓값(정수)을 출력하는 문제이다.예산 배정은 아래와 같은 2가지 경우가 존재한다.1 모든 요청이 배정될 수 있는 경우국가 예산으로 각 지방에서 요청한 모든 예산을 지
백준 돌 게임 문제 풀이이다.창영이와 상근이는 돌 n개로 마지막 돌을 가져가는 사람이 이기는 게임을 하고 있다.항상 상근이부터 게임을 시작하고, 각 턴에서 1개 또는 3개의 돌을 가져갈 수 있을 때 승자를 출력하는 문제이다.돌이 4개인 경우를 생각해보자.먼저 상근이가
백준 주사위 세개 문제 풀이이다.1부터 6까지의 눈을 가진 주사위 3개를 던져서 아래의 규칙에 따라 상금을 받는다고 한다.1 같은 눈이 3개가 나오면 '10,000원 + (같은 눈) × 1,000원'의 상금을 받게 된다.2 같은 눈이 2개만 나오는 경우에는 '1,000
백준 다리 놓기 문제 풀이이다. 강을 기준으로 서쪽에 n개의 사이트, 동쪽에 m개의 사이트가 있다. (n 다리가 겹치면 안 되고, 동쪽의 사이트 수가 서쪽과 같거나 크다. 따라서 동쪽 m개 사이트 중 n개를 고른 뒤, 서쪽 n개의 사이트를 순서대로 연결해야 한다.
백준 부분수열의 합 문제 풀이이다. N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분 수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하는 문제이다. (
백준 영화감독 숌 문제 풀이이다.입력 n에 해당하는 영화 제목에 포함된 숫자를 출력하는 문제이다.종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 의미한다.즉, 가장 작은 종말의 수는 666이고, 처음 만든 영화 제목은 '세상의 종말 666'이 된다
백준 K번째 수 문제 풀이이다.n개의 정수를 오름차순 정렬했을 때, k번째 있는 수를 구하는 문제이다.파이썬의 sort()의 평균 시간 복잡도는 O(nlogn)인데, n이 5,000,000 이하이므로 1초 이내로 정렬이 끝날 것이다.따라서 내장 정렬을 이용하여 리스트를
백준 퇴사 문제 풀이이다.어떤 상담원이 N + 1일째 되는 날 퇴사를 하는데, 남은 N일 동안 최대한 많은 상담을 하고 싶어 한다고 한다.N일 동안 매일 상담이 잡혀 있고, 각 상담은 완료하는 데 걸리는 기간 T와 상담을 완료했을 때 받을 수 있는 금액 P가 존재한다.
백준 ZOAC 4 문제 풀이이다.최대한 많은 사람이 앉으려면 공간을 아껴야 하므로, (1, 1)에 참가자를 앉힌다고 가정했다.이제 이 참가자를 기준으로 안전 거리(세로: n, 가로: m)를 고려하여 한 명씩 붙여 앉히면 된다.사람이 차지하는 공간(세로: 1, 가로: 1
백준 럭키 스트레이트 문제 풀이이다.주어진 게임에서 캐릭터의 점수를 반으로 나눴을 때, 왼쪽 부분과 오른쪽 부분의 각 자릿수 합이 같은 경우 럭키 스트레이트라는 기술을 쓸 수 있다고 한다.캐릭터의 점수(n)가 주어질 때, 럭키 스트레이트 기술을 쓸 수 있다면 LUCKY
백준 국영수 문제 학생 N명의 이름과 국어, 영어, 수학 점수가 주어질 때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성해야 한다. [1] 국어 점수가 감소하는 순서로 [2] 국어 점수가 같으면 영어 점수가 증가하는 순서로 [3] 국어 점수와 영어
백준 정수 삼각형삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n + 1번째 줄까지 다음과 같은 정수 삼각형이 주어진다.현재 위치에서 대각선 왼쪽 또는 대각선 오른쪽 값 중 하나를 선택해서 누적으로 더하며 맨 위층부터 한 층씩 내려올 때, 그 합이
백준 안테나일직선 상에 위치한 집 n개의 위치가 주어질 때, 안테나(어떤 한 집에 설치)로부터 모든 집까지의 거리 총합이 최소가 되는 위치를 찾는 문제이다.추가로 안테나를 설치할 수 있는 위치 값이 여러 개일 경우, 가장 작은 값을 출력해야 한다.그림을 그려보면 모든
백준 지름길일방 통행으로 역주행 불가능한 길이 d의 고속도로와 n개의 지름길이 주어질 때, 위치 0에서 출발하여 위치 d에 도달하기 위한 최단 거리를 구하는 문제이다.조건은 다음과 같다.1 n은 12 이하의 자연수이고, d는 10,000 이하의 자연수이다.2 모든 위치
백준 트리의 부모 찾기루트 없는 트리가 주어질 때, 각 노드의 부모를 구하는 프로그램을 작성하는 문제이다.추가 조건은 다음과 같다.1 트리의 루트는 1이라고 정의한다.2 노드의 개수 N(2 ≤ N ≤ 100,000)에 대해 N - 1개의 연결 정보가 주어진다.3 부모
백준 꿀 아르바이트단순하게 for 문으로 접근하면 시간 초과가 뜬다. sum()의 시간 복잡도가 O(m)이므로, 아래 코드의 시간 복잡도는 O((n -m + 1) \* m)이다.위의 코드에서 매번 슬라이싱된 리스트의 합을 구하는 대신, m개의 리스트를 오른쪽으로 한 칸
백준 두 수의 합combinations()를 활용한 코드는 시간 초과가 뜬다..n개의 원소 중에서 2개를 뽑는 경우의 수는 n (n - 1) / 2인데, n이 100,000일 경우에는 약 5 10^9개의 조합이 생성될 수 있어 1초를 넘을 수 있다.투 포인터 알고리
백준 DNA 비밀번호
백준 최대 힙파이썬의 heapq 모듈을 활용했는데, 이는 기본적으로 최소 힙(min heap)으로 작동한다. 따라서 자연수 x를 저장할 때, -x를 저장하여 heappop()의 결과로 최댓값이 출력되도록 했다.예를 들어, x가 차례대로 5, 3, 8이 주어졌다고 할 때
백준 절댓값 힙절댓값이 가장 작은 값이 여러 개일 때 가장 작은 수를 출력해야 한다. 예를 들어, |5|와 |-5|가 있는 경우 -5를 출력해야 한다.이를 처리하기 위해 튜플로 heap에 x와 x의 절댓값을 같이 저장했다. heapq.heappop(heap)은 abs(
백준 순열 사이클문제에서 주어진 순열은 각 요소가 정확히 하나의 위치로 연결된 그래프이다. 각 노드는 하나의 다음 노드로만 이동할 수 있으므로, 이 그래프는 무조건 사이클을 형성한다.dfs()가 시작되는 시점은 방문되지 않은 노드를 만났을 때이므로, dfs()가 시작되
백준 단지번호붙이기
백준 가장 긴 감소하는 부분 수열가장 긴 감소하는 부분 수열 문제이다.dpi를 i번째 원소까지의 가장 긴 감소하는 부분 수열이라 하자.0번째부터 (i - 1)번째 원소를 순차적으로 탐색하면서, 해당 탐색의 기준점이라 할 수 있는 i번째 원소보다 큰 원소가 있다면, 그
가장 큰 증가하는 부분 수열

백준 수학은 비대면강의입니다
백준 수들의 합 2
백준 숫자 야구아래와 같이 리스트를 순회하면서 원소를 제거하면 인덱스가 변동되어 일부 원소가 스킵되거나 예상치 못한 동작을 하게 된다.
백준 트리 순회
백준 병든 나이트N이 1인 경우위아래로의 이동이 불가하므로, 시작점이 유일하게 방문 가능한 칸이다.N이 2인 경우2번, 3번 이동을 이용하여 이동 가능하다.다만, 1번과 4번 이동을 사용할 수 없기 때문에, 이동 횟수가 다섯 번 이상이면 4가지 이동 방법을 한 번씩 사
백준 상자넣기
백준 등수 매기기각 학생이 예상한 등수와 최대한 가까운 등수를 부여해야 한다. 따라서 학생들의 예상 등수를 오름차순으로 정렬한 뒤, 순서대로 실제 등수를 부여하면 된다!
백준 동물원
백준 🐜 기적의 매매법 🐜
백준 A → B a를 b로 바꾸기 위한 최소 연산 횟수를 구하는 문제이므로, BFS로 접근해도 된다.
백준 촌수계산가족 관계를 그래프(노드: 사람, 간선: 관계)로 표현할 수 있고, 촌수는 두 노드 간 최단 경로이므로 BFS로 접근했다.
백준 N번째 큰 수아래와 같이 주어진 모든 수를 리스트에 담아 정렬한 뒤, n번째로 큰 수를 출력하는 것이 쉽게 떠올릴 수 있는 접근이다.하지만.. 메모리 제한이 12MB라서 메모리 초과가 뜨게 된다.메모리 초과가 뜨는 이유는 다음과 같다.n의 최댓값이 1,500이기
백준 좋은수열
백준 두 용액
백준 IF문 좀 대신 써줘
백준 디지털 티비KBS1이 첫 번째, KBS2가 두 번째인 입력은 주어지지 않으며, 방법의 길이는 500보다 작으면 된다.그러므로 1번과 4번 버튼만 사용해서 문제를 해결할 수 있다.(1) 1번 버튼을 통해 KBS1의 인덱스로 화살표를 이동시키고, 4번 버튼을 통해 K
백준 햄버거 분배아래의 이유에서 그리디 알고리즘으로 접근했다.왼쪽에서 오른쪽으로 순차 탐색하면, i번째에 위치한 사람이 i - k, i + k 범위에서 가장 왼쪽에 위치한 햄버거(인덱스 값이 가장 작은 것)를 먹을 경우, 이후 사람들이 선택 가능한 햄버거 개수가 최대가
백준 나이트의 이동
백준 문자열 교환a, b의 위치에 관계 없이 원하는 문자열끼리 교환 가능하다.모든 a가 연속이 되려면?원형 문자열의 어떤 구간을 잘랐을 때, 그 구간에 속한 a의 개수가 처음 주어진 문자열의 a의 개수와 같아야 한다.그렇지 않다면, 개수 차이만큼 b가 포함되어 있다는
백준 스타트와 링크
백준 블로그
백준 집합주어진 조건에 따라 분기 처리하면 된다.
백준 쿠키의 신체 측정머리, 심장, 팔, 허리, 다리가 위치할 수 있는 조건이 정해져 있기 때문에, 머리에서 다리로 이동하며 필요한 값을 계산했다.
백준 등수 구하기
백준 1, 2, 3 더하기 4
백준 벽 부수고 이동하기
백준 퇴사 2dpi를 'i일까지 근무해서 얻을 수 있는 최대 수익'으로 정의하자.이제 i일이 되었을 때, i일에 잡힌 상담을 진행할 수 있는지를 따져야 한다.즉, i일에 진행한 상담의 종료일(i + schedulesi - 1)이 퇴사 일(n + 1) 이전인지 확인해야
백준 안전 영역
백준 팰린드롬 만들기팰린드롬(Palindrome) 문자열은 앞에서부터 읽어도, 뒤에서부터 읽어도 동일한 문자열이다. 즉, 완전한 대칭을 이루는 문자열이다.이 문제는 알파벳 대문자로만 이루어진, 길이 최대 50인 문자열(name)이 주어질 때, 사전 순서를 기준으로 첫
백준 막대기
백준 스택 수열
백준 숫자 카드 2
백준 수 정렬하기 3아래는 이 문제를 읽고, 가장 쉽게 떠올릴 수 있는 코드라 생각한다.많은 알고리즘 문제에서 시간 복잡도를 고려하는데, 시간 제한이 5초이기 때문에 문제가 없기 때문이다.하지만 아래 코드는 시간 초과가 아닌 메모리 초과가 뜬다.이 문제에서 메모리를 8
백준 곱셈추가로 파이썬의 내장 함수 pow()는 최적화되어 있기 때문에 정답이다.