백준 문제풀이 63

[백준 3009번 문제] 네 번째 점

이 문제는 좌표 3개의 값을 입력받은 후에 직사각형이 되기 위한 조건을 만족하는 나머지 한 점의 좌표를 구하는 문제이다. 처음에 이 문제를 보고 직사각형 네 점이 항상 만족하는 조건이 무엇인지 생각하고 어떻게 풀어나가야 할 지 고민했었다. 직사각형 4개의 좌표에서 x좌표와 y좌표는 같은 값을 두개씩 가져야 하는 공통점을 발견했다. 예를 들어, 예제 입력 1에서는 (5,5), (5,7), (7,5) 가 입력되었는데 x좌표에서 5는 두개이지만 7은 한번 입력되었으므로 나머지 하나 x좌표는 반드시 7이여야한다. 그리고 y좌표에서도 5는 두개이지만 7은 한번 입력되었으므로 나머지 하나 y좌표는 반드시 7이여야한다는 점이다. (5,5), (5,7), (7,5) --> (7,7) 이러한 결론이 나오는 것이다. st..

백준 문제풀이 2022.08.11

[백준 1427번 문제] 소트인사이드

이 문제는 주어진 숫자를 각 자리수를 내림차순으로 정렬하는 문제이다. 숫자를 각 자리수로 나누기 위해서는 문자열로 바꾸어서 리스트에 저장하는 방식으로 구현하였다. for i in str(num): num_list.append(i) for문을 통해 입력받은 숫자를 문자열로 바꾼 후에 각 자리별로 리스트에 추가해주었다. 2143 ['2', '1', '4', '3'] 입력한 숫자가 이런식으로 리스트에 저장된다. num_list.sort() num_list.reverse() 그 다음에 sort함수를 이용해서 오름차순으로 정렬한 후에 reverse함수를 이용해서 역순으로 바꾸어 주었다. for i in num_list: print(i,end='') 마지막으로 for문을 통해서 리스트안에 숫자들을 프린트해주었다. ..

백준 문제풀이 2022.08.10

[백준 25305번 문제] 커트라인

이 문제는 N명의 학생들의 점수를 입력받아서 k명까지의 커트라인을 계산하여 출력하는 문제이다. 입력값을 나란히 받기 위해서 map함수를 이용해 공백으로 split하여 각 변수 에 값을 저장하였고 아래 점수들은 값을 리스트 형태로 score라는 변수에 저장하였다. n, k = map(int,input().split()) score = list(map(int,input().split())) 그리고 sort함수를 이용하여 오름차순으로 점수를 정렬한 뒤에 reverse함수를 이용해서 내림차순으로 다시 정렬하였다. sort함수를 이용하지 않고 reverse를 이용하게 되면 내림차순으로 정렬이 아니라 입력한 값을 역순으로만 정렬하기 때문이다. 그 다음 결과값은 처음에 입력한 k까지의 점수를 보여주어야 하는데 리스트..

백준 문제풀이 2022.08.09

[백준 25304번 문제] 영수증

이 문제는 반복문을 통해서 주어진 금액과 입력한 금액의 총합이 같으면 Yes 다르면 No를 출력하는 문제이다. 입력받은 숫자만큼 for문을 반복하여 가격과 양을 입력받아서 더해주는 방식으로 풀면 된다. map함수를 이용해서 스페이스바로 분리하여 각 변수에 값을 할당해주었다. 긜고 마지막 if문을 통해 처음 입력한 값과 계산한 총합이 같다면 Yes 다르면 No를 출력하도록 구현하였다. import sys input = sys.stdin.readline total = int(input()) n = int(input()) sum = 0 for i in range(n): price, num = map(int, input().split()) sum += (price * num) if total == sum: pr..

백준 문제풀이 2022.08.08

[백준 2108번 문제] 통계학

이 문제는 숫자들을 입력받아서 산술평균, 중앙값, 최빈값, 범위를 출력하는 문제이다. 산술평균, 중앙값과 범위를 구하는 것은 쉬웠는데 최빈값을 구하는게 가장 어려웠다. 다른 것은 금방 풀었는데 최빈값 푸는데 시간이 가장 오래 걸린 것 같다. 시간을 단축하기 위해서 sys.stdin.readline을 요즘 자주 사용하고 있다. 은근 꿀팁! input = sys.stdin.readline 먼저 입력한 값 만큼 숫자를 입력받아서 빈 리스트에 저장해준다. n = int(input()) num = [] for i in range(n): num.append(int(input())) num.sort() for문을 통해서 빈 리스트에 값들을 저장하고 sort함수를 통해 오름차순으로 저장을 하였다. 1. 산술평균 sum..

백준 문제풀이 2022.08.07

[백준 11653번 문제] 소인수분해

이 문제는 숫자를 입력받아서 소인수분해를 한 결과값을 출력하는 문제이다. 소인수분해란 자연수를 소인수의 곱으로 나타낸 것인데 소인수로 몫이 소수가 될 때까지 나눗셈하는 것이다. 그래서 숫자를 입력받아서 while문을 통해 입력받은 숫자가 1보다 클때까지 2부터 나누어서 나머지가 0이 되는경우에 출력을 해주는 것이다. 2로 나누어서 나머지가 0이 안된다면 값을 증가해서 계속해서 나누어 주는 방식으로 구현하였다. import sys input = sys.stdin.readline num = int(input()) i = 2 while(num > 1): if num % i == 0: print(i) num /= i else: i += 1

백준 문제풀이 2022.08.03

[백준 2581번 문제] 소수

이 문제는 시작값과 종료값을 입력한 후에 그 사이에 있는 소수들의 합과 최소값을 출력하는 문제이다. 저번 문제에서는 소수를 구하는 문제였는데 소수가 되는 조건은 1보다 큰수 이면서 자기 자신보다 작은 수로 나누었을 때 나머지가 0이 되지 않는 수를 소수라고 정의하였다. 총 2번의 시도 끝에 문제를 맞췄당 sum = 0 for i in prime_num: sum += i 처음에는 소수를 구해서 리스트에 넣은 다음 따로 for문을 사용해서 하나하나 인덱스에 접근해서 더해줘서 그런지 시간초과 에러가 발생했다. import sys input = sys.stdin.readline start = int(input()) end = int(input()) prime_num = [] for i in range(start..

백준 문제풀이 2022.08.02

[백준 1978번 문제] 소수 찾기

이번 문제는 입력한 숫자에서 소수가 몇개인지를 출력하는 문제이다. 먼저 이 문제를 풀기위해서 어떤 자연수가 소수인지 아닌지를 판별하는 조건이 있다. 1. 1보다 큰 수 2. n보다 작은 어떠한 수로 나누었을 때 나머지가 0이되면 합성수가 된다. import sys input = sys.stdin.readline n = int(input()) num_list = list(map(int,input().split())) prime = 0 # print(num_list) for i in num_list: error = 0 if i > 1: for j in range(2, i+1): if i % j == 0: error += 1 # print("error" , error) if error == 1: prime +..

백준 문제풀이 2022.07.29

[백준 10989번 문제] 수 정렬하기 3

이번 문제는 수 정렬하는 문제인데 sort 함수를 이용해서 하면 간단할거 같다고 생각을 하고 코드를 짰다. n = int(input()) number = [] for i in range(n): num = int(input()) number.append(num) number = sorted(number) for i in number: print(i) sort 함수를 이용해서 풀었더니 메모리 초과 에러가 발생하였다. 문제를 보니깐 메모리가 8MB 밖에 주어지지 않았다. for문을 돌면서 append함수를 사용하게되면 메모리가 계속 할당되어 효율적이지 못하게 메모리를 사용한다고 한다. 문제에서 주어진 입력값이 10000보다 작거나 같은 수이기 때문에 배열 인덱스를 생각해서 10001개의 리스트를 만들고 안에 ..

백준 문제풀이 2022.07.29

[백준 10815번 문제] 숫자카드

이번 문제는 입력받은 숫자가 내가 가지고 있는 숫자중에 있는지 없는지 판별하는 문제다. 그래서 배열 두개에 숫자를 입력받고 for문으로 돌려서 조건문으로 판별하려고 했었는데 시간초과가 떴다ㅜ 요즘엔 문제는 풀리는데 시간초과가 많이 뜨는거같다ㅜ num = int(input()) sanggeun = list(map(int,input().split())) m = int(input()) nums = list(map(int,input().split())) for i in range(len(nums)): if nums[i] in sanggeun: nums[i] = 1 else: nums[i] = 0 for i in nums: print(i, end=' ') 처음 방식으로 푼 코드인데 시간초과가 떠서 다른 사람들은 ..

백준 문제풀이 2022.05.20