본문 바로가기

CodingTest/Baekjun Online Judge

(111)
[ BOJ / 파이썬 ] 2667 단지 번호 붙이기 - 30분 소요 - 와 .. ㅠㅜ 실수해서 10분을 날려먹었다.. bfs처음 시작하면서 q에 첫 원소 넣을 때 해당 원소를 방문처리하는 걸 놓쳤다. - 덕분에 이중 방문해서 예상 값보다 1씩 더 나오는 에러 잡느라 시간 걸렸다. - 문제 자체는 단순한 bfs적용, 2583 영역 구하기랑 같은 맥락의 문제였다. - python list unpaking operator쓰는 법 까먹어서 검색해서 찾아옴.. import sys input = sys.stdin.readline from collections import deque n = int(input()) board = [list(map(int, list(input().strip()))) for _ in range(n)] visited = [[False]*n ..
[ BOJ / 파이썬 ] 2583 영역 구하기 누가봐도 bfs문제! ㅡ [1] 상자를 칠한다. (2중 for문으로 칠해주기) : 1에서 전에 배운 누적합을 사용해볼까 헀는데 옹? input 최대값이 100밖에 안되길래 그냥 2중for문으로 칠했다. 대신 이미 칠해진 부분은 패스하도록 설정 [2] 안 칠해진 영역의 개수와 넓이를 구한다.(bfs 이용) 이 부분은 전형적인 bfs문제! ㅡ : 사실 상자가 뒤집혀 있는데 영역 개수와 넓이 구하는 거라 뒤집힌 채로 그냥 구해도 괜찮을 것 같아 고대로 받아서 계산했다. : 근데 이렇게 하니까 좌표값이 개인적으로 자꾸 헷갈렸다. 그래서 디버깅하느라 시간이 조금 소요되어서 아쉽다. : 공간감각이 떨어져서 좌표에서 꼬이면 멘탈 나가는 것 같은데.. 흠.. 조심하자! import sys input = sys.stdi..
[ BOJ /파이썬 ] 11660 구간 합 모두가 처음 접하면 같은 과정을 거치는 듯한 문제인 것 같다. 2중 for문으로 생각했다가 아무리 생각해도 시간 초과인데.. 싶으면서 일단 해보고 역시나 시간초과가 나서 풀이를 찾아보는..? '누적 합' 구현 방식을 이해하고 나면 또 금새 해결된다. 내가 약한 dp풀이가 섞여들어가서 나는 단번에 이해가 된 건 아니었는데 아래 링크 보고 확실히 이해할 수 있었다. https://bmy1320.tistory.com/entry/%EB%B0%B1%EC%A4%80-Silver1-%EB%AC%B8%EC%A0%9C-%EB%B0%B1%EC%A4%80-%ED%8C%8C%EC%9D%B4%EC%8D%AC-11660-%EA%B5%AC%EA%B0%84-%ED%95%A9 백준/ Silver1 문제 , 백준 파이썬 11660 , ..
[ BOJ / 파이썬 ] 13335 트럭을 지나는 트럭 뭔가 익숙하다 싶었는데 역시나 프로그래머스에서 풀었던 문제였다. https://proprotrainee.tistory.com/42 [ 프로그래머스 ] 다리를 지나는 트럭 / 코드 1 / def solution(bridge_length, weight, truck_weights): q=[0]*bridge_length sec=0 while q: sec+=1 q.pop(0) if truck_weights: if sum(q)+truck_weights[0] 애초에 bridge큐의 각 값을 0으로 설정한 이유는 무게가 없이 공간을 차지하기 위해서! -> 매 시간단위마다 bridge 맨 앞의 값은 사라진다. 그래서 해당 프로세스에서 조건에 맞지 않는 경우 0을 넣으면 이동한 것처럼 구현되는 것! . 5. 하나 더 놓치..
[ BOJ / 파이썬 ] 14499 주사위 굴리기 확실히 프론트 관련 프로그래밍을 하니까 시뮬레이션 문제가 잘 풀리는 것 같다. 동작 단위로 나눠보는 프로세스를 그래도 계속 거쳤기 때문이지 않을까 싶었다. 해당 문제에서는 자료 저장 파트와 동작 파트가 타 문제에 비해 더 쉽게 구분된다. -자료 저장 파트 1. 맵의 상태 2. 주사위 상태 -동작 파트 주사위 굴리기 : 주사위 상태 변화 : 굴리기 이전 동작: 세부적으로 넘어가면, 굴렸을 때 맵 범위를 벗어나는 지 체크 : 굴리고 그 이후 동작: 추가 구현-> 숫자 복사하기 ( 맵 주사위 ) 1. 맵 상태, 주사위 상태는 배열로 저장. 범위가 짧아서 별 생각 없이 리스트 사용. 2. 주사위 굴리기 이전 동작은 평소 하던대로 dx, dy배열 잡고 nx,ny = x+dx[i], y+dy[i]이런 식으로 nx,..
[ BOJ / 파이썬 ] 15665 N과M(11) | 제출 1 | import sys input = sys.stdin.readline N, M = map(int, input().split()) nums = sorted(list(map(int, input().split()))) keep = [] visit = [0]*N result = set() def recur(x): if x == M: result.add(tuple(keep)) return for i in range(N): visit[i] = 1 keep.append(nums[i]) recur(x + 1) visit[i] = 0 keep.pop() recur(0) for res in sorted(list(result)): print(*res) : N과M(10)응용 문제정도이다. : 정말 단순하게 백트..
[ BOJ / 파이썬 ] 15664 N과M(10) | 제출 1 | import sys input = sys.stdin.readline N, M = map(int, input().split()) nums = sorted(list(map(int, input().split()))) keep = [] visit = [0]*N result = set() def recur(x): if x == M: result.add(tuple(keep)) return for i in range(N): if not visit[i]: if not keep or keep[-1]
[ BOJ / 파이썬 ] 15657 N과M(9) (*다시 체크 요망, 덜 이해한듯*) | 제출 2 | # 백트래킹 사용한 풀이 import sys input = sys.stdin.readline N, M = map(int, input().split()) nums = sorted(list(map(int, input().split()))) keep = [] visit = [0]*N def recur(x): if x == M: print(*keep) return overlap = 0 # 이 부분 직접 해결한 것 아님. 다시 확인해보기 for i in range(N): if not visit[i] and overlap != nums[i]: visit[i] = 1 keep.append(nums[i]) overlap = nums[i] recur(x + 1) visit[i] = 0 keep.pop()..
[ BOJ / 파이썬 ] 15657 N과M(8) | 제출 1 | # 중복조합 메서드 사용 import sys input = sys.stdin.readline from itertools import combinations_with_replacement N, M = map(int, input().split()) nums = sorted(list(map(int, input().split()))) for item in combinations_with_replacement(nums, M): print(*item) : 중복을 허용해서 ( 본인 포함 ) 순서를 고려해서 뽑는 경우의 수 : 중복조합 메서드 사용한 풀이 | 제출 2 | : 백트래킹 구현 실패 .. 🤕 # 백트래킹 import sys input = sys.stdin.readline from iterto..
[ BOJ / 파이썬 ] 15656 N과M(7) | 제출 1 | # 백트래킹 import sys input = sys.stdin.readline N, M = map(int, input().split()) nums = sorted(list(map(int, input().split()))) keep = [] def recur(x): if x == M: print(*keep) return for i in range(len(nums)): keep.append(nums[i]) recur(x+1) keep.pop() recur(0) : 백트래킹 이용한 풀이 : nums의 모든 값마다 nums의 처음부터 끝까지 짝 지어줘야하기에 for문의 인덱스 범위를 전체로 설정했다. : 중복을 허용하며 본인과도 겹쳐도 되기에 중복 여부를 확인하는 과정이 없다. | 제출 2 |..