728x90
반응형

코딩테스트 34

[코딩 테스트 합격자 되기] 프로그래머스 기반 코딩 테스트 입문서 후기, 코딩 테스트 입문서 추천

"코딩 테스트 합격자 되기" 교재를 완독했다. 하루에 1문제 ~ 3문제 정도를 푼 결과 완독은 2달 정도 걸렸다. 분량이 700페이지 정도 되기에 이걸 언제 다 읽나 하긴 했지만, 매일 조금씩 늘어가는 스스로를 보니 그렇게 긴 분량도 아니었던 것 처럼 느껴진다. 이 교재는 프로그래머스 문제 + 저자 출제 문제 합쳐서 총 100문제가 담겨 있고, 코딩 테스트에서 중요하게 생각할 점이나 시간 복잡도 계산법 같은 초보자가 놓치기 쉬운 부분을 가장 먼저 짚고 시작한다. 최근 코딩 테스트에서 나오는 빈출 유형들은 대부분 실려 있으나, 이분 탐색 알고리즘이 실려 있지 않다는 것이 조금 아쉽긴 하다. 도서명: 코딩 테스트 합격자 되기평점: 7/10 우선 책을 읽기 전 나의 기반 지식부터 말하겠다. 1년 전 쯤 크래프..

독서/IT 2025.11.19

[백준 20922 / Python / 실버1] 겹치는 건 싫어

슬라이딩 윈도우 or 투 포인터 문제이다. 나는 슬라이딩 윈도우가 익숙하고 더 직관적이라고 생각해서, 슬라이딩 윈도우 방식으로 풀었다. from collections import defaultdictimport sysinput = sys.stdin.readline"""최장 연속 부분 수열 길이 구하기같은 정수는 K개 까지 허용N: 제공된 수열 길이K: 같은 정수 허용 상한nums: 제공된 수열num_count: 각 숫자 당 개수 세는 딕셔너리, 기본값 int슬라이딩 윈도우딕셔너리 구조 -> 숫자: 개수-> 특정 숫자가 K개가 넘었다면, left는 특정 숫자 위치까지 진행하며 딕셔너리에서 값을 빼고 right는 right + 1 부분부터 다시 진행한다"""N, K = map(int, inp..

[백준 2075 / Java / 실버3] N번째 큰 수

자료구조, 정렬 문제이다.메모리 제한이 걸려 있긴 한데, 메모리를 신경쓰지 않아도 풀리긴 한다.난 3가지 방식으로 풀어보았다. import java.io.*;import java.util.*;public class N번째_큰_수_2075 { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; int N = Integer.parseInt(br.readLine()); int[] table = new int[N*N]; /** 숫자를 하나의 배열로 전부 입력받기 */ int i..

[백준 2304 / Java / 실버2] 창고 다각형

처음 문제를 보고, 이분탐색인가? 그리디인가? 어떤 알고리즘이지? 고민했는데,결국 그냥 구현이었다. import java.io.*;import java.util.*;public class 창고_다각형_2304 { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; /** * 가장 작은 창고 면적 구하기 * 한번 내려가면 다시 올라오면 안된다 * * 올라가기: 기존 높이로 쭉 진행하며, 높은 걸 만날때마다 올라간다 * 내려가기: 가장 높은 곳에 도달했다면, 내..

[백준 1406 / Java / 실버2] 에디터

문제 자체는 시뮬레이션인데, 시뮬레이션 그대로 구현하면 무조건 시간 초과가 난다. 시간제한이 0.3초고, 삽입/삭제를 직접 수행할 경우 명령어가 50만개라서 50만 * 10만 하면 500억번 연산이라 자료구조를 잘 활용해야 한다.나는 ArrayDeque 2개를 활용했다. import java.io.*;import java.util.*;public class 에디터_1406_v2 { static ArrayDeque left = new ArrayDeque(); static ArrayDeque right = new ArrayDeque(); public static void main(String[] args) throws Exception { BufferedReader br = new BufferedRead..

Algorithm/Stack 2025.07.19

[백준 1003 / Java / 실버3] 피보나치 함수

기본적인 피보나치 함수 문제이다. 일반적으로 재귀 또는 DP 형태로 풀 수 있다.이 문제에서는 시간제한이 0.25초로 짧기 때문에 DP로 풀어야 한다. import java.io.*;public class Main { static int zeroResult = 0; static int oneResult = 0; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for (int i = 0; i 첫 번째 시도 코드다. 최대 N이 40이라 ..

[백준 11501 / Python / 실버2] 주식

그리디 문제이다. 살짝 어려웠다. 난 2가지 방식으로 풀었는데, 의문점이 있다. import sysinput = sys.stdin.readline"""1. 큰 값 순서대로 정렬2. 현재 가장 큰 값 기준으로, 원본 리스트 역순 순회하며 가장 큰 값 찾기3. 찾았다면, 가장 큰 값 포함한 좌측 값 전부 사서 큰값에 팔기4. 원본리스트에서 방금 사용된 값을 전부 없애기5. 반복현재 가장 큰 값 idx가 while문당 1씩 증가하는데, 이거 좀 비효율이다. 이후에 올 큰값들이 지워지면 쓸모없어지기 때문따라서 가장 큰 값 리스트에서도 값들을 지워주고, 항상 0으로 인덱싱 하면 될 것 같은데 귀찮다.[1, 3, 1, 10, 2, 9, 3, 10, 5][10, 9, 5, 3, 2, 1]"""for _ in rang..

Algorithm/Greedy 2025.07.11

[백준 20310 / Python / 실버3] 타노스

그리디 문제이다. 실버 3보다는 좀 더 쉬운 것 같다. 시간복잡도도 고려할 필요 없다. 난 고려하긴 했지만. import sysinput = sys.stdin.readline"""0이 앞에 최대한 많아야 한다1은 앞부터 지우고0은 뒤부터 지우면 되지않나1. 리스트로 받아서 , 지우지 말고 -1로 교체 (지우는 연산 오버헤드 방지)2. 앞부터 -1이 아닐 경우 출력"""S = list(map(int, input().strip()))"""0, 1 개수 세기"""count = [0] * 2 # 0의 개수, 1의 개수 저장할 리스트for num in S: if num == 0: count[0] += 1 else: count[1] += 1"""앞부터 1 지우기"""delete..

Algorithm/Greedy 2025.07.04

[백준 3758 / Python / 실버2] KCPC

구현, 정렬 문제이다. 입력값이 다양하게 주어져서 헷갈리고, 관리해야 하는 데이터가 많아 헷갈린다.그러나 정렬 조건만 제대로 숙지한다면 크게 어렵지 않게 풀 수 있는 문제이다. import sysinput = sys.stdin.readline"""k개의 문제를 풀면 0점 ~ 100점 획득함 -> 팀ID/문제번호/점수 저장한 문제를 여러 번 제출하면, 최고점수가 최종점수 -> 제출안하면 0점팀의 점수는 각 문제 최종 점수의 합점수가 동일한 팀이 있을 경우1. 점수가 같으면, 제출 횟수가 적은 팀이 이긴다2. 점수와 제출 횟수가 같으면, 마지막 제출 시간이 빠른 팀이 이긴다정렬 조건: 점수 높은순, 제출횟수 적은순, 제출시간 빠른순"""for _ in range(int(input())): """ ..

Algorithm/정렬 2025.07.03

[백준 2607 / Python / 실버2] 비슷한 단어

구현, 문자열 문제이다. 비슷한 단어가 될 수 있는 조건을 정확히 찾으면 쉬운 문제인데, 조건 하나를 빠뜨려서 조금 헤맸다. from collections import defaultdictimport sysinput = sys.stdin.readline"""길이가 2이상 차이나면 제외.1. 길이가 1차이나는 경우, 나머지 문자의 개수가 전부 같다면 비슷한 단어이다.2. 길이가 같은 경우, 모든 문자가 같으면 비슷한 단어이다.3. 길이가 같은 경우, 하나의 문자가 다르다면 비슷한 단어이다.-> 이 3가지 외에 만족하는 케이스는 없다."""N = int(input())ref = input().strip()ref_count = defaultdict(int)for key in ref: ref_count[k..

728x90
반응형