Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- c언어 기본
- c언어
- 코테
- 도커
- 스택
- 데베시 1주차
- 자료구조
- python기초
- 5장
- python자료형
- 참고X
- python기본
- 1주차(1)
- git 오류
- git오류
- Workbench
- 그리디
- Git
- git기초
- 4장
- #코린이 #코딩 #할 수 있다
- 최단거리
- 인스타
- 파이썬 알고리즘 인터뷰
- 코딩테스트
- 인텔리제이
- c언어 제어문
- 백준
- DP
- 운체 1주차
Archives
- Today
- Total
하루살이 개발자
[Softeer] Level2 문제풀이 by Python 본문
1. 금고털이 - 정렬이용
import sys
w, n = map(int, input().split())
jew = [list(map(int, input().split())) for _ in range(n)]
jew = sorted(jew, key = lambda x : x[1], reverse = True)
total = 0
for weight, price in jew:
if w > weight:
total += weight * price
w -= weight
else:
total += w * price
break
print(total)
2. 8단 변속기 - 단순 조건문
import sys
n = list(map(int, sys.stdin.readline().split()))
if n == [1, 2, 3, 4, 5, 6, 7, 8]:
print("ascending")
elif n == [8, 7, 6, 5, 4, 3, 2, 1]:
print("descending")
else:
print("mixed")
3.장애물 인식 프로그램 - bfs 이용
import sys
from collections import deque
answer = []
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def bfs(x, y):
count = 1
q = deque()
q.append((x, y))
visited[x][y] = True
while q:
x, y = q.popleft()
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if -1 < nx < n and -1 < ny < n:
if not visited[nx][ny] and graph[nx][ny] == '1':
q.append((nx, ny))
visited[nx][ny] = True
count += 1
answer.append(count)
n = int(input())
graph = [input() for _ in range(n)]
visited = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if not visited[i][j] and graph[i][j] == '1':
bfs(i, j)
print(len(answer))
print('\n'.join(map(str, sorted(answer))))
4. 지도 자동 구축 - dp
import sys
n = int(input())
dp = [0] * 16
dp[0] = 2 # 한 변에 존재하는 점의 갯수
for i in range(1, n+1):
dp[i] = dp[i-1] + (dp[i-1] -1) # 2 3 5 9
print(dp[n]**2)
5. 비밀메뉴 - 리스트에서 특정 리스트 포함되어 있는지 확인
import sys
m, n, k = map(int, input().split())
secreat = list(map(int, input().split()))
li = list(map(int, input().split()))
result = False
for i in range(len(li)):
if li[i] == secreat[0]:
count = 0
for j in range(len(secreat)):
if i+j >= len(li):
break
else:
if li[i+j] == secreat[j]:
count += 1
if count == len(secreat):
result = True
if result == True:
print("secret")
else:
print("normal")
6. 회의실 예약 - 어렵(단순구현)
import sys
n, m = map(int, input().split())
room = {}
for i in range(n): # room 리스트 넣기
room_name = input()
room[room_name] = [[i, i+1] for i in range(9, 18)] #[i, i+1]
#print(*room)
for _ in range(m):
a, b, c = map(str, input().split())
for i in range(int(b), int(c)):
if [i,i+1] not in room[a]:
pass
else:
room[a].remove([i,i+1]) # 예약 가능한 시간에서 제거하기ㅏ
#print(*room['sonata']) # [9,10][11,12][12,13][13,14][16,17][17,18]
for val in sorted(room.keys()): # 예약 불가능 한 경우, room이름으로 오름차순
if len(room[val]) == 0: # 가능한 시간 없는 경우
print("Room " + val + ":")
print("Not available")
if val == sorted(room.keys())[-1]: # 마지막 val이면 하이픈 출력 안하고 종료
break
else:
print("-----")
continue # 다음 val값으로
else: # 예약이 다 차지 않았을 경우
tmp = []
answer = []
for i in range(len(room[val])):
if len(room[val]) == 1:
tmp.append(room[val][i])
if len(room[val])-1 == i:
tmp.append(room[val][i])
elif 0 <= i < len(room[val])-1:
if room[val][i][1] == room[val][i+1][0]:
tmp.append(room[val][i])
else:
tmp.append(room[val][i])
answer.append([tmp[0][0], tmp[-1][1]])
tmp = [] #초기화
if tmp == []:
pass
else:
answer.append([tmp[0][0], tmp[-1][1]])
print("Room " + val + ":")
print(len(answer), "available:")
for i in range(len(answer)):
if answer[i][0] == 9:
answer[i][0] = "09"
print(answer[i][0] + "-" + str(answer[i][1]))
else:
print(str(answer[i][0]) + "-" + str(answer[i][1]))
if val == sorted(room.keys())[-1]:
break
else:
print("-----")
7. 전광판 - 아이디어(단순구현)
import sys
arr = [[1,1,1,0,1,1,1],[0,0,1,0,0,1,0],[1,0,1,1,1,0,1],[1,0,1,1,0,1,1],[0,1,1,1,0,1,0],[1,1,0,1,0,1,1],[1,1,0,1,1,1,1],[1,1,1,0,0,1,0],[1,1,1,1,1,1,1],[1,1,1,1,0,1,1]]
n = int(input())
for _ in range(n):
a, b = input().split()
while len(a) < 5:
a = '-' + a
while len(b) < 5:
b = '-' + b
result = 0
for i in range(5):
if a[i] == '-' and b[i] == '-':
continue
elif a[i] == '-':
for j in arr[int(b[i])]:
if j == 1:
result += 1
elif b[i] == '-':
for j in arr[int(a[i])]:
if j == 1:
result += 1
else:
for j in range(7):
if not arr[int(a[i])][j] == arr[int(b[i])][j]:
result += 1
print(result)
8. gcb - 그냥 제한 값 다 넣고, 다 돌려서 비교하기(효율성은 거의 비슷하네,,)
import sys
n, m = map(int, input().split())
limit = [0 for i in range(101)]
h = 0
for i in range(n):
a, b = map(int, input().split())
for j in range(h+1, h+a+1):
limit[j] = b
h += a
speed = [0 for i in range(101)]
h = 0
for i in range(m):
a, b = map(int, input().split())
for j in range(h+1, h+a+1):
speed[j] = b
h += a
max_value = 0
for i in range(101):
max_value = max(max_value, speed[i] - limit[i])
print(max_value)
'코딩테스트' 카테고리의 다른 글
[백준] 자료구조 유형 (2) | 2023.03.14 |
---|---|
[Softeer] Level3 문제풀이 by Python (2) | 2023.02.04 |
[SQL] 리트코드 SQL 문제 모음 (0) | 2023.01.06 |
코테를 위한 JAVA 정리 (0) | 2022.10.05 |
[프로그래머스] Level1 - 키패드 누르기(Java) (0) | 2022.08.07 |