공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이 189

[Python] 프로그래머스. 등굣길 (Level 3)

https://programmers.co.kr/learn/courses/30/lessons/42898 코딩테스트 연습 - 등굣길 | 프로그래머스 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = 4, n = 3 인 경우입니다. 가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다. 격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매 programmers.co.kr 학교에서 모눈종이에 각 칸마다 +1 하면서 풀던 문제와 동일한 로직이다. 왼..

[Python] 백준 14499. 주사위 굴리기

https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마 www.acmicpc.net 삼성SW역량평가 시뮬레이션 문제. 코드가 어렵다기보다는 문제를 이해하는 게 고통스러웠다. 문제를 풀기 위해서는 1. 주사위라는 ..

[Python] 프로그래머스. 2020 카카오 recruit - 괄호 변환 (Level 2)

https://programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 | 프로그래머스 카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 콘은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 programmers.co.kr 2020 카카오 공채 응시할 때, 전반적으로 문제 난이도가 너무 어려워서 ..

[Python] 백준 14888. 연산자 끼워넣기

https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. www.acmicpc.net 삼성SW역량테스트 기출문제. 연산자를 만들어낼 수 있는 경우의 수를 생성해야 하는데, combinations를 쓰면 (+,*)와 (*,+)가 같은 경우로 인식된다. 모든 경우의 수를 제대로 반영하려면 permutations를 쓸 수 있고, permutations에서 만들어지는 중복 문제는 set()..

[Python] 프로그래머스. 최고의 집합 (Level 3)

https://programmers.co.kr/learn/courses/30/lessons/12938 코딩테스트 연습 - 최고의 집합 | 프로그래머스 자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 집합으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만족하면서 각 원소의 곱 이 최대가 되는 집합 예를 들어서 자연수 2개로 이루어진 집합 중 합이 9가 되는 집합은 다음과 같이 4개가 있습니다. { 1, 8 }, { 2, 7 }, { 3, 6 }, { 4, 5 } 그중 각 원소의 곱이 최대인 { 4, 5 } programmers.co.kr 주어진 n과 s에서, 자연수의 개수 n보다 s의 크기가 큰 경우는 불가..

[Python] 백준 16234. 인구 이동

https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 www.acmicpc.net 삼성SW역량테스트 기출문제. 조건대로 코드를 만들었는데, Python으로는 78%에서 시간초과가 뜨고 PyPy3으로 실행하면 통과한다..

[Python] 프로그래머스. 숫자 블록 (Level 4)

https://programmers.co.kr/learn/courses/30/lessons/12923 코딩테스트 연습 - 숫자 블록 | 프로그래머스 1 10 [0, 1, 1, 2, 1, 3, 1, 4, 3, 5] programmers.co.kr 문제 조건이 어려운 건 아니지만, begin과 end의 숫자범위가 말해주듯 효율성이 관건인 문제. 문제 조건에 따르면, 특정 시점의 번호를 채울 수 있는 값의 우선순위는 해당 번호 % 2 == 0 인 경우 > 해당 번호 % 3 == 0인 경우 > 해당 번호 % 4 == 0 인 경우... 이다. 여기까지만 이해해도 정확성은 100% 달성이 가능하다. 효율성을 확인하는 핵심은 '해당 숫자가 소수인지 아닌지' 확인하는 것. 해당 숫자가 소수라면, 1과 자기 자신 이외에..

[Python] 프로그래머스. 순위 (Level 3)

https://programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 | 프로그래머스 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr 처음에는 그래프로 분류되어 있길래 위상정렬 문제인가 싶어서 한참 고민한 문제. 이 문제의 핵심은 '선수 A'가 있을 때, A를 이긴 사람과 A에게 진 사람의 수를 합치면 n-1이 되도록 만드는 것. 그리고 "A에게 진 사람은 A를 이긴 사람에게 반드시 진다' 와 'A를 이긴 사람은 A에게 진 사람을 반드시 이긴다'는 조건. 위 문제의 예시라면, 2번 선수가 5번 선수를 이겼고 1,3,4번 선수에게 졌다는 것은 '2번 선수에게 진' 5번 선수는 '2번 선..

[Python] 백준 13458. 시험 감독

https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 삼성A형 기출문제는 지금까지 거의 다 Brute Force + DFS / BFS 형태였는데, 별다른 고민없이 그냥 풀었던 문제. 모든 시험방에는 최소 한 명의 총감독관이 필요하고, (각 방에 남은 응시자 수 / 부감독관 1인당 처리할 수 있는 사람 수) 값을 소수점 이하 올림하면 각 방에 들어갈 수 있는 부감독관의 최소 숫자가 나온다.

[Python] 프로그래머스. 디스크 컨트롤러 (Level 3)

https://programmers.co.kr/learn/courses/30/lessons/42627 코딩테스트 연습 - 디스크 컨트롤러 | 프로그래머스 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를들어 - 0ms 시점에 3ms가 소요되는 A작업 요청 - 1ms 시점에 9ms가 소요되는 B작업 요청 - 2ms 시점에 6ms가 소요되는 C작업 요청 와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다. 한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 programmers.co.kr heapq 라이브러리를 사용하고, 프로세스가 queue에 들어올 수..