"Boldness has genius, power, and magic in it." - Johann Wolfgang von Goethe
728x90
728x90

SWEA 9

[SWEA] 1926. 간단한 369 게임

 간단하다고 하지만 생각보다 간단하지 않은 369게임 주어진 숫자를 가지고 map, split, list 함수들을 사용해서 range로 늘어뜨리고, 그 중에서 3, 6, 9가 들어가면 '-' 를 출력하는 문제. python의 문자열, 숫자, 리스트를 잘 다룬다면 쉽게 풀 수 있는 문제인 것 같다. 과거의 나는 숫자로 100의 자리 10의 자리 1의 자리를 구분해서 3, 6, 9를 체크한 후, 해당하는 만큼 '-' 를 출력해서 풀었던 것 같다. 하지만 이번에는 문자열을 list로 split 하여 체크한 후에 포함하는 만큼 개수를 카운팅해서 '-'를 출력 해 보았다. 📌 학습한 내용 1. 문자열에 list함수를 사용하면 단어 단위로 쪼개어 져서 리스트를 형성한다. 2. elif 함수를 사용하면 조건에 맞게..

SWEA 2022.01.02

[SWEA] 1859.백만장자 프로젝트

미래를 보는 원재의 시세차익을 계산해 주는 문제. 처음 문제를 보고 N의 의미가 N개마다 끊어서 미래를 볼 수 있는 줄 알고, N개씩의 시세차익을 합치는 코드를 짰다. 하지만 계속해서 Fail을 당한 후 다시 문제를 꼼꼼히 검토했고, 리스트의 시세차익을 계산해 주는 calPrice() 클래스를 만들어 TestCase마다 시세차익을 계산하는 알고리즘을 구성했다. 📌 학습한 내용 1. 문제를 꼼꼼히 잘 읽어보자. 2. 클래스를 만들어서 사용하면 매우 편리하다. 3. 앞에서부터 했을 때 막히면, 반대로 생각하는 지혜를 가지기! TC = int(input()) def calPrice(Days): MaxNum = Day[-1] # 맨 뒤의 숫자부터 크기 비교 Day.reverse() # 역순으로 바꾼 후 탐색 V..

SWEA 2022.01.01

[SWEA] 1974. 스도쿠 검증 코드 리뷰

🎱 파이썬 SWEA-Problem[D-2] 1974.스도쿠 검증 주어진 9X9 배열을 가지고 스도쿠 검증을 합니다. 올바른 스도쿠 퍼즐일 경우 1을, 아닐경우 0을 출력합니다. 💡 아이디어 가로/세로, 블럭을 구분해서 카운팅정렬을 사용하여 스도쿠 퍼즐을 검증합니다. 가로와 세로는 하나의 for문으로 검증가능하여 한번에 검사하고, 블럭은 새로운 for문을 이용합니다. 검증의 용이성을 위해 sdoku 함수를 만들어 리스트와 num(1~9)를 입력받아 사용합니다. 🎲 파이썬 코드 ※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다. > 문제보기 T = int(input()) # 스도쿠 검사하는 함수 def sdoku(list, nums): check = [0 for _ in range(9)]..

SWEA 2021.03.30

1225. [파이썬 S/W 문제해결 기본] 7일차 - 암호생성기

🚛 파이썬 SW문제해결 기본 - 큐(Queue) 주어진 N개의 수를 다음과 같은 조건을 통해 8가지 암호를 만드는 문제입니다. 조건은 주어진 N개의 수를 큐(Queue)라고 생각하고 맨앞의 수에서 1~5를 순서대로 뺀 후 큐의 맨 뒤에 append하는 싸이클입니다. 💡 아이디어 큐, 8개의 숫자 중 첫번째 숫자를 1~5씩 마이너스하는 싸이클을 돌며 8개의 한자리 수가 남을 때까지 반복하고 맨 마지막 자리가 0이면 종료 반복횟수가 정해지지 않았으므로 while을 사용해서 반복. 맨앞자리가 계속해서 뒤로 가므로 슬라이싱을 이용하여 배열을 다시 만들어줌. 맨 뒷자리가 0이 되었을때 break로 탈출. while문 탈출할때 for문한번 나오고 또 나와야 하므로 check라는 종료조건 생성. 🎲 파이썬 코드 ※ ..

SWEA 2021.03.03

1224. [파이썬 S/W 문제해결 기본] 6일차 - 계산기3

🚛 파이썬 SW 문제해결 기본 - Stack2 주어진 계산식을 1) 후위표기식으로 변경하고 2) 그 표기식을 계산하는 문제입니다. 연산자는 +, * 두 가지이고, 괄호의 유효성여부는 항상 옳은 경우만 주어집니다. 💡 아이디어 문제 그대로 후위표기식으로 주어진 문자열을 변경하고, 계산해주는 함수를 만들었습니다. 후위표기식 변경 시 숫자는 그대로 append하고 문자는 '(', '+', '*', ')' 에 대한 조건을 각각 만들어 스택에서 연산자 우선순위를 반영하는 코드를 만들었습니다. 후위표기식으로 바꿔서 계산하기, +, *, (,) 괄호는 항상 유효. 피연산자 0~9 + : 괄호가 없으면 스택에 있는 것들 pop, 괄호있으면 append * : 괄호가 없으면 스택에 있는 '*' 모두 pop, 괄호있으면 ..

SWEA 2021.03.03

4881. [파이썬 S/W 문제해결 기본] 5일차 - 배열 최소 합

🚛 파이썬 SW문제해결 기본 - Stack2 NxN 배열에서 세로당 하나의 숫자를 선택해 모두 더했을 때 최소의 합을 구하는 문제입니다. 같은 세로열에서 2개의 숫자를 선택할 수는 없습니다. 💡 아이디어 순열과 조합 문제, DFS를 구현하여 풀고 계산량을 줄이기 위해 가지치기 사용합니다. 가지치기를 하지 않으면 계산량초과로 오류가 발생하기 때문에 유의하여야 합니다. 한 세로열 당 방문함을 체크하고 다음 열로 넘어가는 코드를 신경써서 배치하였습니다. 백트래킹을 사용하여 좀 더 효율적인 코드를 완성하였습니다. 🎲 파이썬 코드 ※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다. # TODO Learn 4881 배열최소합. def per(k, midV): # 최솟값 가져오기. global m..

SWEA 2021.03.03

4880. [파이썬 S/W 문제해결 기본] 5일차 - 토너먼트 카드게임

🚛 파이썬 SW문제해결 기본 - Stack2 가위바위보할 상대를 구할 때 주어진 카드 순서를 절반씩 나누어 토너먼트 형태로 시합 대진을 구성하는 문제입니다. 최종적으로 상대가 나눠지게 되면 가위바위보를 진행하고 최종적으로 승자를 가려내어 출력합니다. 💡 아이디어 반복되는 작업을 함수와 재귀를 활용해서 해결합니다. 범위를 둘로 나눌때 구간을 잘 나누어 주어야 겹치는 부분이 발생하지 않습니다. 🎲 파이썬 코드 ※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다. # TODO 4880 토너먼트 가위바위보 def game(i, j): # 종료조건..점점 줄어들기 때문에 자신과 같아지면 i 출력 if i == j: return i # 게임을 시키는 범위. # 범위를 둘로 나눠서 재귀를 돌림.. ..

SWEA 2021.03.03

4875. [파이썬 S/W 문제해결 기본] 5일차 - 미로 코드분석

🚛 파이썬 SW문제해결 기본 - Stack2 델타값과 스택을 활용해서 상하좌우 4방향을 체크하는 문제입니다. 델타값을 이용해서 4방향을 체크할때에 배열의 범위를 벗어나지 않도록 체크하는 것이 중요합니다. 💡 아이디어 DFS 알고리즘을 기반으로 미로의 시작점에서 부터 4방향을 체크해가며 목적지를 찾아나가는 방식으로 코드를 구성했습니다. Stack에는 이동가능한 곳들을 담아주고 방문한 곳은 기본 배열에서 0으로 초기화 되어있던 것을 1로 바꾸어줍니다. 계속해서 이동하며 목적지인 3에 도착하면 break하여 반복문을 빠져나옵니다. 🎲 파이썬 코드 ※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다. """ - 문제 미로 : 2(출발), 3(도착), 0(통로), 1(벽) 도착할 수 있으면 1 ..

SWEA 2021.03.03

4874. [파이썬 S/W 문제해결 기본] 5일차 - Forth 코드분석

🚛 파이썬 SW문제해결 기본 - Stack2 스택을 활용한 후입표기법 계산기 만들기 문제입니다. 후입표기법으로 주어진 문자열을 계산만 하면 되는 문제이기 때문에 크게 어렵지 않은 문제였습니다. 💡 아이디어 숫자와 문자열을 구분하는 isdigit, isalpha 메소드를 활용합니다. 전체적으로 숫자일때와 문자열일때를 구분하고 문자열안에서는 '.'를 기준으로 조건문으로 나눠주었습니다. 💻 파이썬 코드 ※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다. T = int(input()) for tc in range(1, T+1): lst = list(map(str, input().split())) Stack = [] for i in range(len(lst)): # 숫자일 경우.. if lst..

SWEA 2021.03.03
728x90
728x90