본문 바로가기

코딩테스트8

프로그래머스 - 소수 찾기 (Python) 문제 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. n은 2이상 1000000이하의 자연수입니다. 풀이 def solution(n): answer = 0 # 1. 1은 소수가 아니므로 2부터 n까지의 수를 확인한다. for x in range(2, n+1): # 2. x가 2부터 x의 제곱근 사이의 자연수로 나누어 떨어지면, 소수가 아니다. for j in range(2, int(x ** 0.5) + 1): if x % j == 0: isPrime = False break # 3. x가 2부터 x의 제곱근 사이의 자연수로 나누어 떨어지지 않는다면, 소수이다. if isPrime == True: answer += 1 return answer 이 문제는.. 2022. 6. 23.
프로그래머스 - 행렬 테두리 회전하기 (Python) 문제 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 행렬의 세로 길이(행 개수) rows, 가로 길이(열 개수) columns, 그리고 회전들의 목록 queries가 주어질 때, 각 회전들을 배열에 적용한 뒤, 그 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 .. 2022. 6. 11.
프로그래머스 - 크레인 인형뽑기 게임 (Python) 문제 출처: programmers.co.kr/learn/courses/30/lessons/64061# 코드 def solution(board, moves): answer = 0 stacklist = [] for i in moves: for j in range(len(board)): if board[j][i-1] != 0: #1 if stacklist and stacklist[-1] == board[j][i-1]: #2 stacklist.pop(-1) answer += 2 else: stacklist.append(board[j][i-1]) #3 board[j][i-1] = 0 #4 break return answer 풀이 #1: move 칸의 위쪽부터 돌아가며 값이 0이 아닐 경우 (인형이 존재할 경우)를.. 2022. 6. 6.
백준 2839 - 설탕 배달 (Python) 문제 n kg설탕을 3kg/5kg 봉지에 각각 나눠 담는다. 이때 봉지의 개수가 최소가 되는 경우를 구해야 한다. 설탕이 정확히 나누어떨어지지 않는다면 -1을 출력한다. 코드 n = int(input()) # a: 3kg 봉지 개수 # b: 5kg 봉지 개수 b = n//5 a = n-b*5 while (True): if b == 0 or a % 3 == 0: break b -= 1 a = n-b*5 a = a//3 if a*3+b*5 == n: print(a+b) else: print(-1) 풀이 3kg 봉지보다 5kg봉지에 많이 담아야 당연히 봉지의 수가 더 적을 것이다. 그래서 설탕 총 무게를 5kg로 나누었을 때 몫을 구하고, 그 나머지가 3kg로 나누어떨어지는 경우를 구한다. 나누어떨어지지 않는.. 2022. 5. 8.