프로그래밍-학습기록/코딩테스트 35

프로그래머스 | python | level 2 | 올바른 괄호

어려울 줄 알았는데 쉽게 풀었다. 아이디어는 간단했다. "()"를 계속 삭제해가면 된다. 그래서 처음엔 replace() 함수를 사용했다. 하지만 효율성 테스트를 통과하지 못했다. 그래서 매번 문자열을 탐색에 중간 값을 삭제하는 replace가 아니라, 차례대로 탐색해가며 삭제하는 게 무엇이 있을까 생각했다. 오, 그렇다. 스택을 떠올렸다. 스택을 사용했더니 효율성 테스트를 통과했다. 가장 끝의 두 값이 완전한 괄호("()")가 되면 pop하여 없애는 방식으로 구현했다. 인덱스가 없어 오류가 생기는 경우를 처리하기 위해 try except 구문을 사용했다. 첫 풀이, 효율성 테스트를 통과하지 못 했다. def solution(s): # 올바른 괄호 for _ in range(len(s)): s = s.r..

프로그래머스 | python | level 2 | 다리를 지나는 트럭

푸는 데 걸린 시간 → 2시간에서 3시간 사이 collections 모듈의 deque를 사용해 풀었다. 풀이는 처음에 풀지 못하고 다른 사람의 풀이를 보고 힌트를 얻었다. 하지만 특정 테스트케이스에서 계속 시간초과가 나서 풀지 못하고 있었다. 시간 초과를 어떻게 없앨까 고민하면서, 쓸데 없는 연산에 대한 통찰이 늘었다. 아무 생각 없이 쓰고 있던 sum(bridge)가 문제였다. 테스트케이스 5에서 계속 막히던 코드 from collections import deque def solution(bridge_length, weight_bridge_can_hold, truck_weights): time = 0 bridge = deque([0] * bridge_length) truck_weights = dequ..

프로그래머스 | python | level 2 | 튜플 | 어거지로 풀고 공부하기

2시간 안 쪽으로 푼 것 같다. 내 최초 풀이 # 튜플 def solution(s): answer = [] given_list_without_braket = list(map(lambda x: x.split(","), s[2:-2].split("},{"))) number_count_dict = dict() for element in given_list_without_braket: for number in element: if number in number_count_dict: number_count_dict[number] = number_count_dict[number] + 1 else: number_count_dict[number] = 1 for item in sorted( list(number_coun..

우아한 테크코스 코딩테스트 + 프리코스 회고

일정 서류 지원 ~ Nov 4, 2020 1차 코딩 테스트 Nov 7, 2020 프리코스 Nov 25, 2020 → Dec 15, 2020 최종 코딩 테스트 Dec 19, 2020 서류 지원 질문들이 하나 같이 흥미로웠고 과거를 돌아보고 앞으로 어떻게 살지 생각하는 데 도움이 됐다. 1년 이상 꾸준히 한 것에 블로그와 일기를 적었다. 내년 3월이 되면 프로그래밍도 함께 말할 수 있겠다. 증빙을 위한 포트폴리오 노션 페이지를 처음 만들었다. 1차 코딩 테스트 7문제 중 5문제를 풀었다. 못 푼 두 문제는 그래프 문제 같아 보였다. 사실, 문제를 정확히 이해하지도 못했기 때문에 어떤 자료구조와 알고리즘을 써야하는지 알지 못했다. 프리코스 가장 많이 배우고 성장했던 시기이다. 3주에 걸쳐 숫자 야구, 자동차 ..

백준 온라인 저지 | 4673 | 함수: 셀프 넘버

문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... n을 d(n)의 생성자라..

백준 온라인 저지 | 4344 | 배열: 평균은 넘겠지

문제 나의 풀이 쉬웠다. 입출력 모두 버퍼를 활용하려고 했다. 버퍼로 출력할 때 형식을 어떻게 지정하는지 몰랐는데, String.format 클래스를 처음 알게 되어 사용했다. package baekjunOnlineJudge; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Bj_4344 { public static void main(String[] args) throws IOException { BufferedReader br = new Buffe..

백준 온라인 저지 | 8958 | 배열: OX퀴즈

문제 나의 풀이 문자열 배열을 만들고, 그 배열에 테스트케이스를 "X"를 기준으로 분리해서 넣었다. 문자열 배열에는 O와 공백(아무것도 없음)만이 남았고, 그 배열의 요소의 길이를 구한 다음, 연속으로 더해줬다. ( O가 연속 3개 있으면, 6점 ) 그렇게 모든 테스트케이스를 계산하면 끝이다. 나의 방법이 꽤 복잡했지만, 오래 걸리지 않았다. 아직 다른 사람 풀이를 보지 않아, 다른 사람들은 어떻게 풀었을지 기대가 된다. package baekjunOnlineJudge; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import j..

백준 온라인 저지 | 1546 | 배열: 평균

문제 나의 풀이 쉬웠다. 최댓값을 구한 다음, 문제에서 나온 평균을 구하는 식을 각 점수마다 적용해 모두 더해 평균을 구했다. package baekjunOnlineJudge; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Bj_1546 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int testCount = Integer.parseInt(br.readLine()); ..

백준 온라인 저지 | 2577 | 배열: 숫자의 개수

문제 ( https://www.acmicpc.net/problem/2577 ) 나의 풀이 어려워 보였지만, 무난하게 풀었다. 시간이 좀 더 있었으면 더 효율적인 코드를 짰을 것 같다. 다음에 다시 수정해보자! package baekjunOnlineJudge; import java.util.Scanner; public class Bj_2577 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); double multiplicationResult = 1; double million = 1000000; int[] numberCount = new int[10]; for(int i=0; i 1 && multiplication..