Stay Hungry Stay Foolish

전체 글 430

BOJ 9655번 : 돌 게임 (Python/구현, DP/Silver 5)

9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 설명 돌 N개가 주어질 때, 두 사람(상근이와 창영)이 턴을 돌아가면서 돌을 가져간다. 돌을 1개 또는 3개 가져갈 수 있고, 마지막 돌을 가져가는 사람이 게임을 이기게 된다. (베스킨 라빈스 생각나네?) 게임은 상근이가 먼저 시작하며 두 사람이 완벽하게 게임을 한다고 가정하고, 이기는 사람을 출력한다. 풀이 1. 간단한 풀이 돌이 짝수일 경우 창영이가 무조건 이기는 게임이 되고, 홀수일 경우 상근이가 무조건 이기는 게임이 된다. 따라서 짝수일 때와 홀수일 때를 나누어 푼다. 2. 다이나믹 프로그래밍 알고리즘 적용 다른 풀이 참조(추후에 재풀이 후 설명 예정) Solution 1. ..

BOJ 5073번 : 삼각형과 세 변 (Python/구현/Bronze 3)

5073번: 삼각형과 세 변 각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오. www.acmicpc.net 설명 삼각형 세 변의 길이가 주어질 때 - Equilateral : 세 변의 길이가 모두 같은 경우 - Isosceles : 두 변의 길이만 같은 경우 - Scalene : 세 변의 길이가 모두 다른 경우 삼각형 조건을 만족하지 못하는 경우 "Invalid"를 출력(가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면) 풀이 1. while 문으로 입력값과 출력을 반복 2. 입력값을 리스트에 저장한 후 오름차순 정렬 조건문 1. 입력값이 모두 0이면 반복문 중단 2. 첫 번째 값이 두 번째와 세 번째 길이를 합한 것보다 크거..

BOJ 2164번 : 카드2 (Python/자료구조(큐)/Silver 4)

2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 설명 N장의 카드가 있는데, 한 장이 남을 때까지 다음과 같은 동작을 반복한다. 1. 제일 위에 있는 카드를 버린다. 2. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 위 과정을 반복하고 나면 한 장의 카드가 남게 된다. 그 수를 구해야 한다. 풀이 Queue 사용 1. 큐 생성 2. 1장이 남을 때 까지 버리고, 옮기는 과정을 반복 반복문에서 popleft()를 이용해 윗 장을 버린다. 첫 번째 카드를 append()를 이용해 맨 ..

[SWEA] 5162. 두가지 빵의 딜레마 (Python/D2)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 하나는 A원, 다른 하나는 B원의 빵이 있다. 현재 C원이 있을 때 어떤 빵이든 상관 없이 많은 개수의 빵을 살 수 있다. 두 종류의 개수를 다르게 혹은 한 종류의 빵만 사도 된다. 최대 몇 개의 빵을 살 수 있는가? 풀이 비교 연산자 사용 돈을 A와 B를 나눈 몫으로 비교를 해준다. Solution t = int(input()) for tc in range(1, t+1): a, b, c = map(int, input().split()) if c // a > c // b: print('#'+str(tc), c//a) else: print('#'+str(tc)..

SWEA 2023.11.19

[SWEA] 4466. 최대 성적표 만들기 (Python/D2)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 각 과목의 점수는 정수, 만점은 100점이다. 성적표에는 이 중에서 정확히 K개의 과목을 선택하여 넣을 수 있다. 성적표에 나타나는 총점이 가장 크도록 성적표를 만들어야 한다. 최대로 만들 수 있는 총점은 몇점인지 구해라. 풀이 리스트를 내림차순 정렬 후 반복문으로 k만큼 결과값에 넣어준다. Solution t = int(input()) for tc in range(1, t+1): n, k = map(int, input().split()) score = list(map(int, input().split())) ans = 0 score.sort(reverse=..

SWEA 2023.11.19

[SWEA] 2007. 패턴 마디의 길이 (Python/D2)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 반복되는 마디의 길이를 출력한다. 문자열의 길이는 30이고, 마디의 최대 길이는 10이다. 풀이 현재 문자와 같은 문자가 나오면 현재 문자부터 같은 문자가 나온 이전 위치까지와, 같은 문자가 나온 이후부터 2배 길이까지를 비교하여 같으면 단어의 길이를 저장한다. Solution t = int(input()) for tc in range(1, t+1): word = input() ans = 0 for i in range(len(word)): for j in range(i+1, len(word)): if word[i] == word[j]: if word[i:j-..

SWEA 2023.11.19

[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten (Python/D3)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 높은 곳의 상자를 낮은 곳에 옮기는 방식으로 최고점과 최저점의 간격을 줄인다. 제한된 횟수만큼 옮기는 작업을 한 후 최고점과 최저점의 차이를 반환한다. 제한된 횟수 전에 평탄화 작업이 완료되면 그 때의 최고점과 최저점의 차이를 반환한다. 풀이 min과 max를 쓰면서 반복한다. 1. 최고점과 최저점을 찾아 따로 저장한다. 2. 리스트에서 최고점과 최저점을 제거한다. 3. 제한됫 횟수가 됐거나, 끝나지 않았는데 평탄화가 됐다면(최고점과 최저점이 같아졌다면) 멈춘다. 4. 그게 아니면 최고점에서 1을 빼고, 최저점에서 1을 더한 후 리스트에서 넣어준다. 5. 마..

SWEA 2023.11.19

[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View (Python/D3)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 왼쪽과 오른쪽으로 창문을 열였을 때, 양쪽 모두 거리 2 이상의 공간이 확보될 때 조망권이 확보된다. 조망권이 확보된 세대의 수를 반환해야 한다. 풀이 첫 번째부터 이전 2번째까지와 이후 2번째까지 비교를 한다. 리스트 4개 중(현재 아파트 주변 아파트)에서 max값을 찾고 현재 아파트와의 차이를 저장한다. 1. 현재 위치(i-2)에서 바로 양쪽에 있는 아파트(i-3, i-1)와 높이를 비교한다. 2. 양쪽 아파트가 현재 위치보다 높으면 넘어가고, 그렇지 않으면 거리 차이가 2인 아파트(i-4, i)와 높이를 비교한다. 3. 위와 마찬가지로 현재 위치보다 높..

SWEA 2023.11.16

[SWEA] 5431. 민석이의 과제 체크하기 (Python/D3)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 과제 제출하지 않은 사람 오름차순으로 정렬 풀이 과제 제출한 사람을 담은 리스트에 없는 사람을 출력하게 한다. Solution t = int(input()) for tc in range(1,t+1): n, k = map(int, input().split()) non = list(map(int, input().split())) print('#'+str(tc), end=' ') for i in range(1, n+1): if i not in non: print(i, end = ' ') print()

SWEA 2023.11.16

[SWEA] 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 (Python/D3)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 두 개의 숫자 N, M이 주어질 때, N의 M 거듭제곱 값을 구하는 프로그램을 재귀호출을 이용해야 한다. Solution def calc(n, m): if m == 0: return 1 else: ans = n*calc(n, m-1) return ans for _ in range(10): cnt = 0 case = int(input()) n, m = map(int, input().split()) print('#'+str(case), calc(n, m))

SWEA 2023.11.16

[SWEA] 5948. 새샘이의 7-3-5 게임 (Python/D3)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 서로 다른 7개의 정수 중 3개의 정수를 골라 합을 구해서 수를 만들려고 한다. 이렇게 만들 수 있는 수 중에서 5번째로 큰 수를 출력한다. 풀이 조합(combinatinos) 사용 1. 반복문으로 3개씩 조합을 만들고 합을 리스트에 저장한다. 2. sorted를 사용해 내림차순 정렬을 하고 set으로 중복을 제거한다. 3. 리스트의 5번째(인덱스 = 4)를 출력한다. ✔️ combinations combinations 함수를 사용하기 위해선 itertools 라이브러리를 가져와야 한다. from itertools import combinations ✔️ c..

SWEA 2023.11.16

[SWEA] 1234. [S/W 문제해결 기본] 10일차 - 비밀번호 (Python/D3)

SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com설명번호 문자열에서 같은 번호로 붙어있는 쌍들을 소거하고 남은 번호를 비밀번호로 만든다. 풀이재귀번호 문자열을 리스트로 만든다.리스트를 재귀로 돌게 한다.리스트 길이만큼 반복문을 돌게 하는데, 여기서 이전과 같은 숫자이면 이전 숫자와 현재 숫자를 리스트에서 제거한다.그리고 그 리스트를 재귀를 돌게 한다. 연속된 같은 수가 없을 때까지 반복 혹은 재귀를 돌게 하고 끝이 나면 리스트를 반환한다.※ 결과값 맨 앞에 0이 있으면 안 되므로 제거해줘야 한다.Solutiondef calc(password): for i in range(1, len(password)): ..

SWEA 2023.11.16

[SWEA] 2070. 큰 놈, 작은 놈, 같은 놈 (Python/D1)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 2개의 수를 입력 받아 크기를 비교하여 등호 또는 부등호를 출력한다. 풀이 비교연산자와 조건문을 사용한다. Solution t = int(input()) for tc in range(1, t+1): a, b = map(int, input().split()) if a < b: print('#' + str(tc), '') else: print('#' + str(tc), '=')

SWEA 2023.11.12

[SWEA] 2071. 평균값 구하기 (Python/D1)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 10개의 수의 평균값을 소수점 첫째 자리에서 반올림한 정수를 출력 풀이 • sum() - 리스트의 합계를 구한다. • round() - 소수점 첫째 자리에서 반올림 한 정수를 반환한다. Solution t = int(input()) for tc in range(1, t+1): num = list(map(int, input().split())) print('#'+str(tc), round((sum(num) / 10)))

SWEA 2023.11.12

[SWEA] 1986. 지그재그 숫자 (Python/D2)

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 설명 1부터 N까지의 숫자에서 홀수는 더하고 짝수는 뺐을 때 최종 누적된 값을 구한다. 풀이 2로 나눠지는 것과 그렇지 않은 것을 나눈다. 2로 나눠지면 짝수, 나눠지지 않으면 홀수이다. Solution t = int(input()) for tc in range(1, t+1): n = int(input()) ans = 1 #1에서 시작하므로 for i in range(2, n+1): #2부터 계산 if i % 2 == 0: #짝수인 건 마이너스 ans -= i else: #홀수인 건 플러스 ans += i print('#'+str(tc), ans) 👩‍💻회고 1차..

SWEA 2023.11.11