코딩 테스트 스터디 90

[Level 2] 스택/큐. 다리를 지나는 트럭

문제 https://programmers.co.kr/learn/courses/30/lessons/42583?language=python3 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr 사용 언어 Python3 풀이 과정 하아... 변수 설정부터 뭐뭐가 필요한지 고민하고 처음으로 메모장에 의사코드를 먼저 작성해봤다. 작성하다 보니 의사코드와 살짝씩 달라졌지만 갈수록 어려운 문제를 풀 것이니 처음 방향 설정에 도움이 되는 것 같다. 그리고 처음으로 브레이크 포인트를 추가해 디버깅을 해..

[Level 2] 스택/큐. 프린터

문제 https://programmers.co.kr/learn/courses/30/lessons/42587?language=python3 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr 사용 언어 Python3 풀이 과정 원래 인덱스를 어떻게 저장해야 하나 백준 24061번 문제를 풀면서도 머리 아프게 고민했던 문제인데...풀다가 풀다가 모르겠길래 구글링해서 힌트만 얻고 내 코드에 넣어 풀 수 있었다.바로 for index, value in enumerate문을 이용하여 원래 인덱스와 값을 묶은 튜플을 원소로 하..

[실버 IV] 24060번. 알고리즘 수업 - 병합 정렬 1

문제 https://www.acmicpc.net/problem/24060 24060번: 알고리즘 수업 - 병합 정렬 1 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109) www.acmicpc.net 사용 언어 Python3 풀이 과정 IDE에서는 정답이 출력되는 것을 확인했으나 채점이 느려서 불안한 순간 어김 없이 찾아온 시간 초과 import math import sys N, K = map(int, sys.stdin.readline().strip().split(' ')) A = list(map(int, sys.stdin.readline(..

[실버 V] 16171번. 나는 친구가 적다 (Small)

문제 https://www.acmicpc.net/problem/16171 16171번: 나는 친구가 적다 (Small) 첫 번째 줄에는 알파벳 소문자, 대문자, 숫자로 이루어진 문자열 S가 주어진다. (1 ≤ |S| ≤ 100) 두 번째 줄에는 성민이가 찾고자 하는 알파벳 소문자, 대문자로만 이루어진 키워드 문자열 K가 주 www.acmicpc.net 사용 언어 Python3 풀이 과정 처음엔 이렇게 풀었는데 틀렸습니다가 떠서 여러 예제를 집어넣어보여 빈 구멍을 찾았다.. import sys S = sys.stdin.readline().strip() K = sys.stdin.readline().strip() word_index = 0 for i in range(len(S)): if 48

[실버 IV] 1764번. 듣보잡

문제 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 사용 언어 Python3 풀이 과정 IDE에서는 예시 정답이 출력되는 것을 확인했으나 백준에서는 (역시) 시간 초과가 떴다. 그래도 이제는 코드를 짜면서 이게 시간 초과가 날 것 같은 코드라는 느낌이 왔달까..? 이걸발전한거라고 할 수 있나ㅎㅎ; import sys N, M = map(int, input().split()) names = [] result = [] count = 0 for ..

[실버 V] 1316번. 그룹 단어 체커

문제 https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 사용 언어 Python3 풀이 과정 for문 안에서 if문을 로직에 따라 나눠 문제를 해결했다. 그런데 if문이 많아 뭔가 지저분해 보여 코드를 조금 수정했다. import sys def groupwordChecker(str): list = [] list.append(str[0]) if len(str) == 1: return 1 # 한 글자면 무조건 그룹단어 ..

[실버 IV] 1120번. 문자열

문제 https://www.acmicpc.net/problem/1120 1120번: 문자열 길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 www.acmicpc.net 사용 언어 Python3 풀이 과정 한번에 뜬 맞았습니다!! 처음에 로직을 짤 때 문자를 추가하는 함수까지 만들려고 했는데 생각해보니 문자를 추가한다면 비교 대상의 같은 위치와 같은 문자를 추가할 것이므로 실제로 문자를 추가할 필요는 없고 현재 A 덩어리가 B와 가장 많이 겹치는 부분의 차이를 찾으면 된다는 사실을 깨달았다. 이게 이 문제의 포인트였던 ..

[실버 V] 11723번. 집합

문제 https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 사용 언어 Python3 풀이 과정 set() 함수를 이용해 나름 쉽게 풀었다고 생각했는데 두둥...! 처음 보는 메모리 초과; import sys S = set() # 비어있는 공집합 result = [] # check만 출력 def program(input): global S operator = input[0] if len(input) == 2: number = int(input[1]) if(operator == 'add'..

[브론즈 I] 2389번. 설탕 배달

문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 사용 언어 Python3 풀이 과정 내 머릿속의 로직대로 구현했는데 아무리 봐도 코드가 마음에 안들어... 어쨌든 한 번에 뜬 맞았습니다!! 제출 답안 N = int(input()) if N%5 == 0: # 5의 배수일 경우 바로 최소 봉지 print(N//5) else: for i in range(0, 10): # 3의 배수 하나씩 빼면서 5의 배수 여부 확인 if N-3*i < 0: # 음수면 조..

[브론즈 IV] 10162번. 전자레인지

문제 https://www.acmicpc.net/problem/10162 10162번: 전자레인지 3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 www.acmicpc.net 사용 언어 Python3 풀이 과정 채점이 좀 오래걸렸지만 한 번에 뜬 맞았습니다!! 문제에 서브태스크라고 써져 있길래 뭐지 했는데 T의 길이에 따라 출제한 3문제에 소요한 메모리와 시간을 각각 보여주었다. 이렇게 보여주니깐 좋네. 쉬운 문제라 깔끔하게 풀었다고 생각하지만 혹시 몰라 다른 사람들 풀이도 찾아보았는데 다들 비슷하게 푼 것 같다. 제출 답안 T = int(input())..

[실버 IV] 1475번. 방 번호

문제 https://www.acmicpc.net/problem/1475 1475번: 방 번호 첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 사용 언어 Python3 제출 답안 N = list(input()) # 방 번호 9999 num_set = list(range(10)) current_set = [] count = 0 while(len(N)>0): # 4 num = int(N.pop(0)) # 9 if num in current_set: # 있으면 current_set.remove(num) # 숫자 사용 else: # 없으면 if num == 6: if 9 in current_set: current_set.remove(9)..

[실버 IV] 2108번. 통계학

문제 https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 사용 언어 Python3 풀이 과정 가장 문제가 되는 최빈값을 count함수를 사용해 풀었고 IDE에서는 정답이 출력되는 것을 확인했으나 백준에서는 시간 초과가 떴다. 찾아보니 count 함수는 시간복잡도가 O(n)인데 for문 안에다 써서 시간복잡도가 O(n^2)이나 된 것 같다... 출처: https://hyun-am-coding.tistory.com/entry/Python-list-%EC%97%B0%..

실습으로 배우는 파이썬 下 (클래스~응용편)

[08 클래스] 클래스(class) 하나의 클래스를 가지고 여러 개의 객체를 만들 수 있음 만들어진 객체들은 서로 아무런 영향을 주지 않음 클래스 멤버 : 클래스에서 변수와 같은 역할 클래스 메소드: 클래스에서 함수와 같은 역할 class MyClass: var = '클래스 멤버' def func(self): print('클래스 메소드') - 파이썬에서 클래스 메소드의 인자는 self를 관습적으로 사용해 객체를 전달 클래스 멤버와 인스턴스 멤버 클래스 멤버 : 객체간 서로 공유되는 변수 인스턴스 멤버 : 객체별로 고유한 값을 저장하는 변수 인스턴스 멤버는 self.멤버이름을 통해 선언할 수 있음(특정 객체의 멤버이기 때문에 이러한 형식으로 선언) class KiaK3: brand = '기아' #클래스 멤..

[브론즈 III] 3009번. 네 번째 점

문제 https://www.acmicpc.net/problem/3009 3009번: 네 번째 점 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오. www.acmicpc.net 사용 언어 Python3 제출 답안 import sys x = [] y = [] for _ in range(3): temp = sys.stdin.readline().strip().split(' ') x.append(temp[0]) # x좌표끼리 y.append(temp[1]) # y좌표끼리 # 나머지 x좌표 구하기 if (x[0] == x[1]): res_x = x[2] else: if (x[1] == x[2]): res_x = x[0] else: res_x = x[1] ..

[브론즈 II] 14561번. 회문

문제 https://www.acmicpc.net/problem/14561 14561번: 회문 n진수는 base가 n인 수를 말한다. 예를 들어 십진수는 base가 10인 수이다. n진수의 수 AmAm-1Am-2…A1A0를 n진수로 표현해보면 AmAm-1Am-2…A1A0 = Am × nm + Am-1 × nm–1 + Am-2 × nm–2 + … + A1 × n1 + A0 × n0이다. www.acmicpc.net 사용 언어 Python3 풀이 과정 처음 풀었던 코드이고 예제 입력 시 출력은 맞았는데 제출했더니 틀렸습니다! 어디가 잘못된 건지 테스트 케이스를 changeNum 함수에 대입해 직접 출력한 거랑 계산기 값이랑 비교해봤는데 16진수 변환 시 HEX 값은 '53A69'지만 내 코드에서는 '53106..

실습으로 배우는 파이썬 上 (프로그래밍 첫발 내딛기~모듈)

[01 프로그래밍 첫발 내딛기] 파이썬 예약어 파이썬 예약어는 변수명으로 사용할 수 없음 예약어 확인 명령어 import keyword print(keyword.kwlist) ''' ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] ''' [02 조건문, 반복문] ..

[브론즈 II] 2577번. 숫자의 개수

문제 https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net 사용 언어 Python3 제출 답안 import sys a = int(sys.stdin.readline()) b = int(sys.stdin.readline()) c = int(sys.stdin.readline()) mul = str(a * b * c) arr = list(range(0, 10)) for i in arr: print(mul.count(str(i))) 공부한 내용 range를 사용하여 리스트 만들기 range는 연속된 숫자를 생성하..