전체 글 76

[백준 2477번 문제] 참외밭

이 문제는 ㄱ자 모양의 밭 모양의 길이를 입력받아서 넓이를 계산한 후에 제곱미터당 수확되는 참외의 갯수를 곱해 총 생산되는 참외 갯수를 구하는 문제이다. 처음에 어떻게 풀지 고민을 하다가 큰 사각형 넓이에서 작은 사각형 넓이를 빼주면 되겠다고 생각했다. 그래서 입력값을 받아서 가로와 세로로 구분해서 각 리스트에 저장한 후에 최대값끼리 곱하고 최소값끼리 곱해서 빼주면 되겠다고 생각했는데 틀렸다고 떴다ㅠ 다시 생각해보니깐 작은 사각형 길이가 항상 최소값이지 않을 경우도 있는게 문제였다. 작은 사각형의 가로세로 길이를 어떻게 구할지가 고민이였는데 입력받은 값대로 total리스트에 넣어주고 세로왁 가로의 최대값 인덱스를 구해서 -1과 -5한 인덱스값을 빼준 후에 절대값을 계산하면 작은 사각형의 변의 길이가 나온..

백준 문제풀이 2022.08.19

[백준 10814번 문제] 나이순 정렬

이 문제는 입력한 숫자만큼 사람들의 나이와 이름을 입력받아서 나이순으로 정렬하는 문제이다. 이번 문제는 풀 때 약간 까다로운 조건들이 있었다. 처음에 두개의 값을 딕셔너리에 쌍으로 저장해서 정렬하는 방식으로 풀려고 했는데 딕셔너리는 중복키를 가질 수 없어서 동일한 나이가 입력된 경우에 나중에 입력한 value값으로 바뀌게 된다. 그래서 2차원 배열을 사용해서 풀기로 하였다. n = int(input()) members = [[0 for x in range(2)] for y in range(n)] for i in range(n): age, name = input().split(' ') members[i][0] = int(age) members[i][1] = name 2차원 배열을 어떻게 초기화 해야할지 방..

백준 문제풀이 2022.08.13

[백준 4153번 문제] 직각삼각형

이 문제는 세 변의 길이를 입력받아서 직각삼각형인지 아닌지 판별하는 문제이다. 문제를 풀기위해서는 직각삼각형을 만족하는 조건을 알아야하는데 바로 피타고라스의 정리이다. 가장 긴 변의 제곱은 나머지 두변의 제곱의 합과 같다는 원리이다. 위의 공식을 이용해서 먼저 세 변의 길이를 입력받아서 리스트에 저장해주었다. 그리고 sort() 함수를 이용해서 오름차순으로 정렬한 후에 조건문을 통해 결과값을 출력해 주었다. 입력값이 0 0 0인 경우에는 프로그램을 종료해야 하므로 while 반복문안에 조건문을 넣어주어서 리스트안의 값이 0만 존재하는 경우에는 break를 통해 반복문을 탈출하도록 구현하였다. import sys input = sys.stdin.readline while(True): triangle = l..

백준 문제풀이 2022.08.12

[백준 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