전체 글 185

[골드 V] 12865번. 평범한 배낭

문제 https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 사용 언어 Python3 풀이 과정 이 문제는 "배낭 문제 알고리즘"의 기본 중의 기본 문제였다. 그래서 문제 이름도 평범한 배낭! 그런데 문제 유형은 코딩 테스트에서 몇 번 접해본 것 같았다. 이게 배낭 문제라는 알고리즘으로 취급되는지 몰랐을 뿐. 그래서 이번 기회에 확실히 공부해두려 했는데 생각보다 이해가 좀.. 어려웠다는..

[실버 I] 1074번. Z

문제 https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 사용 언어 Python3 풀이 과정 우왕 이 문제는 생각보다 엄청 빨리 풀었다. 처음 문제를 읽고 나서는 이게... 무슨 그래프 탐색인가 싶었는데 다시 읽어보니 그냥 나눠 생각하면 쉽게 풀 수 있을 것 같은 느낌?! 바로 분할 정복을 사용하는 문제였다. 이 문제는 재귀로 풀든 분할정복으로 풀든 4등분이 핵심이기 때문에 나는 먼저 4등분에 초점을 맞추고 나눠진 구역이 1, 2, 3, ..

[실버 I] 11286번. 절댓값 힙

문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 사용 언어 Python3 풀이 과정 이 문제는 제목부터 힙을 사용하라고 암시하고 있다. 그런데 어떤 힙? 우선순위 큐! 따라서 구글링을 통해 heapq 구현법을 찾아서 아래까지는 쉽게 구현했다. from heapq import heappop, heappush from sys import stdin, stdout input = stdin.readline print = st..

[실버 II] 1541번. 잃어버린 괄호

문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 사용 언어 Python3 풀이 과정 처음에는 어디까지가 숫자이고 문자인지 구분하는 방법을 고민하면서 인덱스를 사용하는 방법, 스택을 사용하는 방법 등을 고민했는데 아무리 생각해도 가장 편한 방법은 split이고... 그런데 +와 - 두 가지이기 때문에 고민하다가 모든 숫자를 뺐을 때 가장 작은 수가 되기 때문에 일단 -를 기준으로 나눴다. 그런 다음 각각의 원소에 또 +가 포함된 경우가..

[실버 III] 17626번. Four Squares

문제 https://www.acmicpc.net/problem/17626 17626번: Four Squares 라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1 www.acmicpc.net 사용 언어 Python3 풀이 과정 DP를 이용해 풀었는데 Python3로는 시간 초과로 실패했다. from sys import stdin input = stdin.readline n = int(input()) # dp[i] = 숫자 i가 가지는 제곱수 합 최소개수 dp = [float("inf")] * (n + 1) dp[0] = 0 dp[1] = 1 f..

[취준 일기] 백엔드 직무 첫 면접 복기

드디어어어어 일주일은 더 전에 본 면접 복기를 남긴다. 진짜 면접 전날부터... 긴장되고 스트레스 받는지 머리가 너무 아프고 만져보면 진짜 뜨끈뜨끈 해가지고 계속 CS 공부하다가 관두고 아침 8시부터 10시까지 두 시간만 잤다. 그러고 나니까 머리는 개운해져서 다행!! 면접은 면접관 3: 면접자 1로 40분 가량 진행됐는데 나는 너무 길다고 느껴졌지만 개발자 채용에서는 짧은 편이라고...😱 까먹을까봐 진작에 쓰려고 했는데 결과도 다 나온 뒤인 이제야 쓴다 ㅎㅎ 질문 목록 복기 - Youtube API 사용했다고 하셨는데 외부 API를 사용하게 된 이유가 있나요? - RDB를 사용하다 보면 n+1 쿼리 오류에 대해 마주치게 되는데 개념을 알고 있는지 관련 경험이 있는지 말씀해주세요. - NoSQL과 RDB..

자유/주절주절 2022.08.14

[취준 일기] 11번가 코딩 테스트 후기

11번가 서비스 개발 직무 코딩 테스트를 응시했다. 마지막으로 봤던 토스에 비하면 훨씬 훨씬 가고싶었던 곳이었는데..! 사전 안내 메일에 Java로만 풀 수 있는 문제도 있고 SQL도 문제도 있다고 해서 큰 기대는 안했다. 그런데 문제는 그게 아니었다. 이 다음에 온 코딩테스트 링크가 포함된 메일을 받고 나는 프로그래머스를 생각하며 사전 응시 환경을 체크하기 위해 링크를 클릭했다가..!! 메일에 써져 있는 멘트를 읽고 1초만에 탭을 닫았다. 아니... 링크 클릭만 해도 부정행위라뇨..? 이런 안내는 처음이라 매우 당황했고~ 나는 이미 클릭했다가 껐고~ 멘붕이었다. 그런데 뭐 어쩌겠나. 이미 나는 클릭했고.. 문제가 없길 바라며 4시에 그대로 응시했다. 그래서 결과는 어쨌냐면... 망했다 ㅎㅎㅎ 낮에 커피..

자유/주절주절 2022.08.13

[골드 V] 5430번. AC

문제 https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 사용 언어 Python3 풀이 과정 오랜만의 골드 문제!! 처음 내가 짰던 코드는 다음과 같다. 나름 붙어있는 RR은 원래대로 돌아오기 때문에 없애는 처리를 했는데도 시간초과가 났다..! 심지어 pypy3로도... from collections import deque from sys import stdin input = stdin.readline def func (functions, array): for func in functions: if fu..

[실버 III] 15650번. N과 M (2)

문제 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 사용 언어 Python3 풀이 과정 이 문제는 조합(combinatoin)을 이용하는 법 / 백트래킹(DFS)을 이용하는 법 이렇게 두 가지 버전으로 풀었다. 조합은 진짜 쉽게 풀었지만, 백트래킹을 구현하는 과정에 있어서 N과 M (2)에 추가된 조건인 오름차순 수열만 출력하는 방식이 추가되었는데... 나는 처음에 for문을 수정하지 못하겠어서 출력시에 오름차순 정렬인지를 확인해 맞는 경우..

[level 2] 양궁대회

문제 https://school.programmers.co.kr/learn/courses/30/lessons/92342?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 사용 언어 Python3 풀이 과정 level 2 문제인데... 풀지 못했다😥 이번주에 코딩테스트 스터디에서 백트래킹을 공부한 이후, 이 문제에도 백트래킹을 사용하면 해결될 것 같아 다시 도전해보려고 했다. 그런데 어떻게 시작해야할지 감도 못잡고 실패..ㅎ 블로그를 참고하니 역시 완전 탐색 문제가 맞는 것 같고 구현 방법은 combination / BFS / D..

[실버 I] 15989번. 1, 2, 3 더하기 4

문제 https://www.acmicpc.net/problem/15989 15989번: 1, 2, 3 더하기 4 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 4가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다. 1+1+1+1 2+1+1 (1+1+2, 1+2+1) 2+2 www.acmicpc.net 사용 언어 Python3 풀이 과정 오랜만에 다시 DP 문제를 풀게 되었다. 그런데 이번에도 헷갈린 점화식 세우기...ㅎㅎ 처음엔 냅다 dp[i-1] + dp[i-2] + dp[i-3] 을 생각해봤는데 아무래도 중복되는 건 하나로 치는 경우 때문에 결과가 훨씬 크게 나왔다. 다시 곰곰이 생각해서 1을 더하는 경우는 항상 있기 때문..

[실버 I] 14888번. 연산자 끼워넣기

문제 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 사용 언어 Python3 풀이 과정 이 문제는 저번에 프로그래머스 못 풀었던 문제처럼(좀 더 쉽지만) 완전 탐색 방법이 제일 처음 떠올랐다. 그래서 그대로 풀어봤더니 python3에서는 시간초고ㅏ... 혹시 몰라 pypy3로 돌려보니까 진짜 천천히 올라가더니 맞았습니다!!가 나오긴 했다. 이후 이중 for문으로 list 선언한 부분을 l..

[취준 일기] 토스 - Web Automation 코딩 테스트 후기

비교적 가벼운 마음으로 쳤던 토스 코딩 테스트가 끝이 났다. 지원 직무부터 조금 고민이 되었는데 직무가 제일 가장 재밌어보이던 Web Automation으로 결정했다. 코딩 테스트 언어가 JavaScript라서 살짝 걱정했지만 그래도 모르는 언어는 아니니까 괜찮다고 생각했다. 그래서 코딩 테스트를 위해 자주 쓰일 것 같은 문법만 따로 정리해서 포스팅하기도 했다. 그런데 막상 전날 약간 멘탈이 나가고 나서 따로 공부를 하지 않아서..ㅎㅎ 사실 코테를 보니 공부한다고 딱히 달라졌을 것 같지 않은 문제들이었다. 언어가 JavaScript인 건 정말 큰 문제는 아니었다. 인터넷 검색도 되기 때문에. 그런데 문자열 조작(?) 3문제 빼고는 정말... Web Automation 직무에서 필요한 간단한 기능 구현 느..

자유/주절주절 2022.08.07

[CS 면접 대비 공부] 소프트웨어 공학

TDD(Test Driven Development) TDD : 테스트 주도 개발, "테스트가 개발을 이끌어 나간다" 우리는 보통 개발할 때, 설계(디자인)를 한 후 코드 개발과 테스트 과정을 거치게 된다. 하지만 TDD는 기존 방법과는 다르게, 테스트케이스를 먼저 작성한 이후에 실제 코드를 개발하는 리팩토링 절차를 밟는다. 반복적인 "검토"와 "고쳐쓰기"를 통해 좋은 글이 완성된다. 이런 방법을 소프트웨어에 적용한 것이 TDD 방식이다. 소프트웨어 또한 반복적인 테스트와 수정을 통해 고품질의 소프트웨어를 탄생시킬 수 있다. 장점 작업과 동시에 테스트를 진행하면서 실시간으로 오류 파악이 가능함 (시스템 결함 방지) 짧은 개발 주기를 통해 고객의 요구사항을 빠르게 수용 가능. 피드백이 가능하고 진행 상황 파..

[CS 면접 대비 공부] 데이터베이스

데이터베이스 풀 Connection Pool 클라이언트의 요청에 따라 각 어플리케이션의 스레드에서 데이터베이스에 접근하기 위해서는 Connection이 필요하다. Connection Pool은 이런 Connection을 여러 개 생성해 두어 저장해 놓은 공간(캐시) 또는 이 공간의 Connection을 필요할 때 꺼내 쓰고 반환하는 기법을 말한다. DB에 접근하는 단계 웹 컨테이너가 실행되면서 DB와 연결된 Connection 객체들을 미리 생성하여 pool에 저장한다. DB에 요청시, pool에서 Connection 객체를 가져와 DB에 접근한다. 처리가 끝나면 다시 Pool에 반환한다. Connection이 부족하면? 모든 요청이 DB에 접근하고 있고 남은 Connection이 없다면, 해당 클라이언..

[CS 면접 대비 공부] 네트워크

OSI 7계층 물리 계층 (Physical Layer) 네트워크의 기본 네트워크 하드웨어 전송 기술을 이룬다. 네트워크의 높은 수준의 기능의 논리 데이터 구조를 기초로 하는 필수 계층이다. 전송 단위는 Bit이다. 데이터 링크 계층 (Data Link Layer) 종단(Point to Point) 간 신뢰성 있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다. 주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다. 데이터 전송 단위는 Frame이다. 네트워크 계층 (Network Layer) 여러개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하..