코딩테스트 164

2022년 4차 Softeer 정기 역량 진단

https://softeer.ai/challenge/certification/detail.do?idx=1974 Softeer 제1조 (목적) 이 약관은 현대엔지비㈜ (이하 ‘회사’)가 제공하는 Softeer 사이트의 테스트 참여에 관한 사항을 규정함을 목적으로 합니다. 제2조 (테스트 응시자의 의무) 1. 아이디와 비밀번호에 softeer.ai 지인한테 추천받은 사이트인데, 해당 사이트에서 정기 역량 진단이 있다고 해서 한번 봤습니다. 모든 문제를 푼 사람에게 Lv.3 등급 인증 자격 부여하며, 해당 등급 인증을 획득하면 현대자동차 등의 현대 계열사의 SW 분야 지원시 코딩테스트 면제라 합니다. 시험 전 공고가 뜨면 신청합니다. 선착순이라고 했는데, 이번 시험 기준으로 453명이 지원했으니 경쟁이 치열하..

PS 2022.09.20

백준 10775번: 공항 (Java)

https://www.acmicpc.net/problem/10775 10775번: 공항 예제 1 : [2][?][?][1] 형태로 도킹시킬 수 있다. 3번째 비행기는 도킹시킬 수 없다. 예제 2 : [1][2][3][?] 형태로 도킹 시킬 수 있고, 4번째 비행기는 절대 도킹 시킬 수 없어서 이후 추가적인 도킹은 불 www.acmicpc.net 딱 보고 '이분 매칭'아니야? 라고 생각을 해서 알고리즘 태그를 까서 봤습니다. 스포당해서 제대로 푼 느낌이 아니네요. 스케줄링 유형의 문제에 약합니다. 풀이 도착한 사람이 현재 갈 수 있는 게이트 중 가장 큰 숫자로 배치시켜야 합니다. 그러려면, 현재 나온 숫자에서 거슬러 올라가면서 아직 사용하지 않은 게이트 중 가장 큰 숫자를 찾으면 됩니다. 가장 먼저 생각나..

PS 2022.09.06

백준 11437번: LCA (Java)

https://www.acmicpc.net/problem/11437 11437번: LCA 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가장 가까운 공통 조상을 알고싶은 쌍의 개수 M이 주어지고, 다음 M개 줄에는 정 www.acmicpc.net 풀이 '뭔 LCA여' 할 수 있겠지만, 질문 게시판의 글에서 알 수 있듯이 naive한 구현으로도 풀릴 수 있도록 설계한 문제입니다. M번의 쿼리마다 최소 공통 조상을 찾는데 순회해야하는 횟수는 최대 O(N)이므로, O(MN)으로 가능합니다. 다만 저는 각 정점 별 parent만 기록한 후, 처음 정점에서 위로 쭉 올라가면서 방문한 정점을 Set에 넣어주고, 두 번째 정점에서 올라가다 Set..

PS/Tree 2022.09.03

백준 2251번: 물통 (Java)

https://www.acmicpc.net/problem/2251 2251번: 물통 각각 부피가 A, B, C(1≤A, B, C≤200) 리터인 세 개의 물통이 있다. 처음에는 앞의 두 물통은 비어 있고, 세 번째 물통은 가득(C 리터) 차 있다. 이제 어떤 물통에 들어있는 물을 다른 물통으로 쏟아 부 www.acmicpc.net 나의 접근 방법 숫자도 작고, 케이스도 얼마 안 많을 거 같아서 경우 나눠주면 될 거라고 생각했습니다. 그런데 경우 나누는게 꽤 빡세더라고요. 못 하겠어서 알고리즘 분류를 보고 풀었습니다. 풀이 A, B, C A ret[2][0] = Math.min(a+b, A); ret[2][1] = Math.max(b-(A-a), 0); ret[2][2] = c; // B -> C ret[..

PS/BFS & DFS 2022.09.02

백준 1939번: 중량제한 (Java)

https://www.acmicpc.net/problem/1939 1939번: 중량제한 첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 www.acmicpc.net 나의 접근 방법 N = 10000, M = 100000이므로 O(N^2)보다 작은 시간복잡도를 갖는 풀이가 있을 거라 생각했습니다. 시작점을 기준으로 특정 점까지 가는 거리를 구하는 문제이기에, 다익스트라에서 로직을 살짝 바꿔주면 될 거라고 생각했습니다. 한 번 틀렸는데, min을 써야할 곳에 max를 쓰는 실수를 고치니 정답을 얻었습니다..

PS/Binary Search 2022.09.01

백준 1865번: 웜홀 (Java)

https://www.acmicpc.net/problem/1865 1865번: 웜홀 첫 번째 줄에는 테스트케이스의 개수 TC(1 ≤ TC ≤ 5)가 주어진다. 그리고 두 번째 줄부터 TC개의 테스트케이스가 차례로 주어지는데 각 테스트케이스의 첫 번째 줄에는 지점의 수 N(1 ≤ N ≤ 500), www.acmicpc.net 나의 (실패한) 접근 방법 1. 플로이드는 O(N^3)이라 일단 제외했습니다. 다만, 풀고 다른 사람의 코드를 보니 플로이드도 아슬아슬하게 제한 시간 내에 도는 거 같습니다. 2. 이후 '음수 사이클이 존재하나 확인하면 된다'는 생각에(아이디어는 맞았죠.), 양수간선은 N번의 다익스트라, 음수 간선은 벨만 포드를 돌려 각자 따로 처리한 후 반복문으로 음수 사이클이 있나 확인해보려고 했..

PS/etc 2022.08.31

백준 17367번: 공교육 도박 (Java)

https://www.acmicpc.net/problem/17367 17367번: 공교육 도박 공교육의 수호자 수찬이는 공교육의 정수라고 할 수 있는 한국정보올림피아드의 문제를 가지고 게임을 하려고 한다. 수찬이는 2010년도 한국정보올림피아드 시·도 지역본선 중등부 1번 문제를 www.acmicpc.net 풀이 dp[i][j][k][n]을 '처음 주사위를 3번 던져 나온 눈이 i, j, k이고, 던질 수 있는 기회가 n번 남았을 때의 기댓값'이라고 정의합니다. 그러면 dp[i][j][k][n] = max((주사위를 한 번 더 던지고, 기회가 n-1번 남았을 때의 기댓값), (i, j, k일 때의 점수))가 됩니다. 자세한 풀이는 에디토리얼를 참고하세요 코드 1 2 3 4 5 6 7 8 9 10 11 1..

PS/DP 2022.08.29

좋은 백준 문제 모음

예전에 만들었었는데, 많이들 봐주길 바라는 마음에 다시 한 번 글을 올립니다. 틈틈히 업데이트하고 있어요! 문제집 링크(Github) / 문제집 링크(백준) 문제 난이도별 정리 실버, 골드 하위 코테를 준비하는 입장이다보니 코테에 나올만한 유형 내에서 추천합니다 문제를 풀고 배울 점이 있었던 문제를 정리해두었습니다. 매일 랜덤하게 하나 잡고 풀어보면 좋지 않을까요? 골드 상위 다익스트라, 위상 정렬, MST 등의 (상대적으로) 어려운 알고리즘의 응용 문제 및 어려운 삼성 구현 문제들이 있습니다. 문제가 재미있고 개념에 insight를 제공하긴 합니다만. 사실 코테 대비로는 좀 오버킬이긴 합니다.

카테고리 없음 2022.08.24

프로그래머스: 메뉴 리뉴얼 (Java)

https://school.programmers.co.kr/learn/courses/30/lessons/72411 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 그렇게 어려운 문제는 아닌데, 독해력 문제로 많이 헤맸습니다. 헤맨 부분 '입출력 예 #2'에서 왜 "AB"는 정답이 아닐까? -> 길이가 같은 course에 대해서는 등장횟수가 가장 많은 메뉴만 코스메뉴 요리 후보군에 넣기 때문입니다. 아마 "... 이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했습니다."가 저 logic이지 않나 싶은데, 알고 읽..

PS/Hash Table 2022.08.20

백준: 구슬 탈출 시리즈 (Java)

백준 13459번: 구슬 탈출 백준 13460번: 구슬 탈출 2 백준 15644번: 구슬 탈출 3 백준 15653번: 구슬 탈출 4 3달 전 즈음에 구슬 탈출 2를 풀었습니다. 당시 구현에 급급하여 간신히 풀었고, 풀고 나서 '어휴 이런 문제는 꼴도 보기 싫다~' 하고 눈 앞에서 치워버린 기억이 납니다. 다시 풀어보니, 구현이 적당히 많고 까다로우며, 시간 커팅할 부분이 많은 흥미로운 문제라 느껴집니다. 풀이 '백준 13459번: 구슬 탈출'을 기준으로 설명합니다. 기본 구현 0) 기울일 때마다 움직이는 건 구슬 2개뿐이므로, 각 구슬의 좌표를 따로 저장하여 관리합시다. 그리고 구멍 좌표도 따로 저장해둡니다. 1) 방향과 빨간 구슬, 파란 구슬 위치에 따라 어느 구슬을 먼저 움직일 지 결정합니다. 2) ..

PS/Implementation 2022.07.29