코딩 테스트 스터디/백준 71

[실버 III] 2630번. 색종이 만들기

문제 https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 사용 언어 Python3 풀이 과정 재귀는 컴퓨터가 하는건데 내 머리로 짜려니 항상 머리가 아프다... 그래도 어찌저찌 풀어서 채점율 7~80%까지 쭉쭉 오르길래 맞았나!!! 했더니 마지막 순간에 틀렸습니다 어디서 틀린걸까 한참을 보다가 질문하기를 보고 어떤 현자님의 답변에서 힌트를 얻었다. def cutting(N, papers): pieces = [] globa..

[실버 III] 2606번. 바이러스

문제 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 사용 언어 Python3 풀이 과정 bfs 문제라지만 bfs로 못풀겠어서(이론에서 문제에 적용 어떻게 하는건즤!!!) 내 논리대로 풀었다가 틀렸다. 근데 웬만한건 정답이 떠서 웨!!! 틀린거야!!하고 스터디원들과도 상의했지만 맞을 듯 말듯 계속 틀렸다. 알고보니 문제는 내가 각 숫자에 방문처리를 해서(시작은 bfs였기 때문) [[1, 2], [2, 3], [3, 4], [5, 6], [7, 8],..

[골드 V] 14503번. 로봇 청소기

문제 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 사용 언어 Python3 풀이 과정 처음에 나는 d(현재 바라보고 있는 방향)에 따라서 다음 좌표값을 다르게 설정해주려 했는데, 그럼 왼쪽으로 회전할 때 뒤로 갈 때 등의 좌표값을 모두 조건문으로 나눠줘야 했다. if d == 0: # 북쪽의 왼쪽 next = (r, c-1) elif d == 1: # 동쪽의 왼쪽 next = (r-1, c) elif d == 2: # 남쪽의 왼쪽 next..

[실버 IV] 4881번. 자리수의 제곱

문제 https://www.acmicpc.net/problem/4881 4881번: 자리수의 제곱 89, 145, 42, 20, 4, 16, 37, 58 사이클 1 사이클 www.acmicpc.net 사용 언어 Python3 풀이 과정 이게 제일 효율적인 방법은 아니더라도 테스트 케이스는 다 맞길래 맞다고 생각했는데!!! 왜 때문에 틀렸습니다?! 반례를 찾으려고 열심히 아무 숫자나 넣어봤는데 내 머리로 계산한 답과 모두 일치했다... import sys cases = [] while True: case = list(sys.stdin.readline().strip().split()) if case == ['0', '0']: break cases.append(case) def sumEach(case): se..

[실버 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%..

[브론즈 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..

[브론즈 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는 연속된 숫자를 생성하..