목록코딩테스트 (8)
공부하는 스누피
https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 �� programmers.co.kr 생각과정 - pre-processing: 장르에 노래 배열을 담는 딕셔너리, 장르에 총 재생횟수를 담는 딕셔너리를 만든다. - 장르에 속한 노래별로 정렬한다. 재생횟수가 같으면 노래 ID로 정렬한다. - 장르끼리 정렬한다. - 정렬된 순으로 장르별 Top2를 추가한다. 구현 import operator def solution(genres, plays): ..
https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 생각과정 - 피보나치를 재귀 함수로 구현했을 때, 리턴값이 0 또는 1이 되는 횟수를 각각 출력해야 한다. - 시간 절약을 위해 Bottom-up DP를 선택. - n 값이 0일 때, 0 개수는 1, 1 개수는 0이다. - n 값이 1일 때, 0 개수는 0, 1 개수는 1로 출력된다. - 피보나치 함수는 n이 실행되면 n-1, n-2 함수를 각각 실행시키기 때문에 n 값이 2일 때 0과 1의 개수는 각각 n-1번째 값과 n-2번째 값을 더한 것과 같다. - 초기값 0, 1은 메모 배열에서 미리..
https://programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴� programmers.co.kr 생각 과정 - 균형인지 테스트는 (의 개수와 )개수가 같은지 검사하는 메소드 check로 수행한다. - 올바른 괄호는 문자열의 첫 문자는 열린 괄호여야만 하고, 마지막 문자는 닫힌 괄호여야 한다. - 괄호 변환 알고리즘이 나와 있으니 그대로 따라 만들면 된다. - 재귀 함수는 받은 문자열을 문자열 u, v로 나누는데, u는 균형있는 괄호이고 더이상 나눠지지 않아..
https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자 programmers.co.kr 생각 과정 - 길이가 n인 문자열을 1개, 2개,,,, n개씩 끊어 문자열 리스트에 넣는다. - 다 넣은 후 리스트를 순회하면서 같은 문자열이 반복되는지 검사한다. - 반복이 유지되면 count를 늘리고, 종료되면 count한 값과 이때까지 중복이었던 문자열을 StringBuffer에 붙인다. - 반복하지 않는 경우는 count없이 StringBuffer에..
https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 생각과정 - for문을 구현할 때, r은 i 인덱스로, c는 j인덱스로 생각한다. - 현재 위치가 (i, j)라면 북쪽은 (i-1, j), 동쪽은 (i, j+1), 남쪽은 (i+1, j), 서쪽은 (i, j-1)이라고 본다. - 청소한 부분은 벽, 빈칸과 구분되어야 하니까 2로 정한다. - 청소하고 왼쪽으로 돌다가 앞에 빈칸있으면 움직인다. 빈칸(0)이 없으면 후진한다. 후진할 때 벽이 있으면 ..
https://programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 생각과정 - 배열의 일부분을 추출하고, - 거기서 k번째 수를 찾는다! - i, j, k가 이차원 배열로 주어져 있으니 for문을 사용해 순회하면서 k번째 수를 넣는다. - i, j, k 쌍의 개수를 N으로 하면, 시간복잡도는 O(N)이다. 구현 import java.util.Arrays; class Solution { public int[] solution(int[] array, int[][] commands) { int[] ..
https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수�� programmers.co.kr https://snoop-study.tistory.com/2 [JAVA] 완주하지 못한 선수 - ArrayList https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 ..
https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수�� programmers.co.kr 생각 과정 - 완주자, 참가자 한명씩 이름을 비교하려면 시간복잡도가 O(n^2)이나 된다. - 순회를 최대한 적게 하는 방법=> 이름 첫글자로 사전을 만들어서 비교하자 => 이차원 배열로 만들었지만 요소 삭제/추가하는 과정에서 한번 순회가 필요함. - ArrayList 배열로 만들면 추가적인 for문 없이 사전을 간편하게 관리할 수 있음...