백준사이트에 있는 시뮬레이션 문제 "치즈" 이다. 골드4의 문제이지만 정답률은 53%로 비교적 쉬운 문제에 속한다! https://www.acmicpc.net/problem/2636 2636번: 치즈 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓 www.acmicpc.net 시뮬레이션 연습으로 한 번 풀어보기 좋은 것 같다. 접근 방법 이 문제는 가장자리를 어떻게 찾느냐가 관건이었다. 처음에 접근할 때, 상하좌우에 0이 하나라도 있다면 바로 가장자리라고 생각하고 풀었다. 하지만 그렇게 될 경우, 치즈 속 구멍은 처리하지 못한다. 그래서 다른 방식으로 접근했다. - 입력 데..
https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 골드 4 난이도 문제이다. 문제 요약 RxC 보드에는 대문자 알파벳이 하나씩 적혀있으며, (0,0) 에서 출발했을 때 말이 가장 많이 갈 수 있는 경로의 길이를 구하는 것이다. 그 경로에는 알파벳이 중복되어서는 안된다. 해결 전략 - dfs 로 해결하였다. - 알파벳 중복을 막기 위해서 길이가 26인 0으로 채워진 배열을 만든 뒤, ord(현재 알파벳) - ord('A') 로 현재 알파벳을..
https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 실버 1 난이도 문제이다. 예전에는 어렵게 풀었을텐데, 이젠 가볍게 풀려서 뿌듯했다..ㅎㅎ 더 높은 난이도도 가볍게 풀리는 날이 오기를,,, 문제 요약 NxN 지역 안에 높이가 저장되어 있고, h만큼의 비가 올 경우 높이가 h이하의 지역들은 물에 잠기게 된다. 이 때 안 잠기는 지역의 개수를 안전영역이라고 하는데, 이 안전영역의 개수의 최댓값 구해야 하는 문제. 해결 전략 - bfs 활용하여 해결했다. ..
시간초과 나온 코드 완전탐색으로 풀었는데 4중 for문일뿐만 아니라 combination한 것을 모두 돌다보니 시간초과가 난 것 같다. from itertools import combinations N, k = map(int, input().split()) words = [] mustKnow = ['a', 'n', 't', 'i', 'c'] # k = k - len(mustKnow) for n in range(N): words.append(input()) def findMaxCnt(words): # 1. 조합으로 words 개수부터 1개까지 for문 돌면서 for w in range(len(words), 0, -1): # 2. 구한 조합이 k개 미만으로 구할 수 있는지 확인 for combi in com..
people = int(input()) a, b = map(int, input().split()) M = int(input()) relation = [[] for _ in range(people+1)] for m in range(M): st, en = map(int, input().split()) relation[st].append(en) relation[en].append(st) result = [] def checkRelation(x): if len(relation[x]) == 0: return result.append(x) # 만약 x가 b라면 끝 if x == b: return True for i in relation[x]: if i in result: continue if checkRelatio..
# 스택을 통해 인덱스로 접근한다. # 먼저 answer 배열도 같이 만들어서 인덱스로 값을 넣는다. # 일단 stack에는 0번 인덱스가 들어가있고, # 바로 다음 인덱스와 비교하여서 큰지 확인한다. # 만약 바로 다음 값이 더 클 경우, 스택에서 더 큰 값이 나올 때 까지 뺀다. # 만약 가리키고 있는 포인터가 배열을 벗어났는데 스택이 비어있지 않으면 # 그 인덱스에 대한 값은 -1로 처리한다. stack = [0] N = int(input()) lst = list(map(int, input().split())) answer = [0] * N pointer = 0 while pointer < len(lst) - 1: if lst[pointer] < lst[pointer + 1]: # 오큰수를 찾음 m..
백준의 키로거 문제이다. 해당 문제는 스택으로 구현하였다. left 와 right 라는 2 개의 스택을 만든 뒤 ''일 경우, 오른쪽 원소를 pop하여 left 스택에 넣었다. '-' 일 경우에는 left 스택에서 원소를 하나 빼주었다. (left 스택의 top 부분이 커서 위치라고 생각하면 된다!) 그 외의 원소들은 left에 추가해준다. 다음은 정답코드이다. import sys def keyLogger(key): pointer = 0 result = "" for k in key: # stack에 값이 있으면서 왼쪽으로 포인터를 이동하는 경우 if result and k == "": if pointer >= len(result): continue pointer += 1 elif len(result) =..
- Total
- Today
- Yesterday
- DP
- 운영체제
- 소셜로그인
- cs공부
- intellij
- 완전탐색
- 4계층
- dfs
- BFS
- OS
- 네트워크
- 파이썬
- 백준
- 5397
- 다대다매핑
- 코테
- 프로그래머스
- SQL
- 코딩테스트
- C++
- cs
- SQLD
- 알고리즘
- allauth
- IPv4
- 인텔리제이
- 브루트포스
- Python
- 동적프로그래밍
- Network
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |