전체 글 86

14503. 로봇청소기 - 시뮬레이션, 구현

사용한 알고리즘, 자료구조 2차원 배열의 델타 검색 접근 방식 문제의 조건을 잘 읽고 정확히 구현한다. 입력 지도의 가로, 세로 길이를 입력받는다. 로봇의 시작 좌표와 초기 방향을 입력받는다. 선언 방문 여부 배열을 선언한다 지도 배열에 방문 여부를 기록할 수도 있다. 델타 탐색을 위한 배열 선언 로봇의 다음 좌표를 담을 리스트를 선언한다. 어려웠던 점 삼성 스타일 완전탐색 중에서는 비교적 간단한 편이었다. 느낀 점 시간을 아낄 수 있는 방법이 많았다. 일반적인 완전탐색(BFS) 처럼 생겼다는 이유로 습관적으로 deque를 import 했으며, visited배열을 선언하기도 했다. 문제를 다시 읽어보니 시공간 복잡도를 줄일 수 있는 방법들이 많았다. 파이썬은 느린 편히니 특히나 시간을 많이 아껴야한다. ..

BOJ/구현 2021.09.27

1759. 암호 만들기 - 파이썬. 백트래킹, DFS

1759. 암호 만들기 사용한 알고리즘 및 자료구조 DFS(백트래킹) 집합 접근 방식 문제의 조건은 아래와 같다. 중복되지 않는 알파벳들을 네 개 선택해서 나열해야 한다. 암호는 오름차순으로 정렬되어야 하며 자음이 2개, 모음이 1개 이상이여야 한다. 아래의 로직대로 풀었다. 입력 / 선언 input을 받는다. 길이가 127인 아스키-리스트를 만든다. input값에 등장한 알파벳들을 아스키값으로 변환, askii 리스트의 해당 인덱스에 '값이 있음' 표시 해준다. 연산 DFS 연산한다. index가 97일 때부터 연산한다 (ord('a') == 97) 연산 종료 조건 길이가 L일 때. 정답 조건 모음이 1개 이상, 자음이 2개 이상 DFS연산 모든 아스키값을 순회하면서 특정 아스키 값이 '있을 떄' 사용..

카테고리 없음 2021.09.24

2468. 안전영역 - 파이썬. BFS

2468. 안전영역 사용한 알고리즘, 자료구조 및 기법 BFS, 큐 델타를 이용한 2차원 배열 완전탐색 접근 방식 1. BFS로 순회. '수위'와 '건물의 높이'를 각 수행마다 비교하며 '구역'의 넓이를 구해야 한다. 2. 수위: 가장 낮은 건물의 높이보다 1 낮을 때~ 가장 높은 건물의 높이와 같을 때까지 모든 경우의 수를 완전탐색. 문제 특이사항 탐색 시작 / 끝 조건 설정이 헷갈릴 수 있다. 어려웠던 점 1. 종료조건의 설정: 높이가 올라갈수록 '구역'의 갯수가 수위에 따라 지속적으로 증가하다가 감소한다고 생각해서 아래와 같은 전제를 짜고 풀었다가 오답 처리당했다. 종료조건: 모두 물에 잠기거나 높이가 상승했을 때 '구역'의 갯수가 이전보다 줄었을 때. 느낀 점 좀 더 범용성 있는 방식으로 구현한 ..

1260. DFS와 BFS - 파이썬

1260. DFS와 BFS 사용한 알고리즘 및 자료구조 1. BFS, 스택 2. DFS, 큐 3. 연결 리스트 접근 방식 1. BFS와 DFS 를 구현한다. 문제 특이사항 1. 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문해야 한다. 스택: 후입선출 큐: 선입선출 의 특징을 염두에 두고 구현해야 한다. 2. DFS 특정 지점의 연결 리스트를 조회할 때 연결 리스트를 1) 오름차순 정렬 후 2) pop()으로 스택에 삽입하면 3) 정점 번호가 큰 순서대로 스택에 삽입된다. ==> 정점 번호가 작은 순서대로 조회할 수 있다! 3. BFS 특정 지점의 연결 리스트를 조회할 때 연결 리스트를 1) 내림차순 정렬 후 2) pop() 으로 큐에 삽입하면 3) 정점 번호가 작은 순서대로..

3019. 뱀

사용한 자료구조 / 알고리즘 덱(deque) 접근 방법 고전 게임 '스네이크'를 직접 구현하는 알고리즘 문제다. 구현해야 하는 요소는 다음과 같다 사과를 먹을 때마다 뱀의 길이가 증가. 뱀이 자신을 물거나 벽에 닿으면 종료. 뱀이 성공적으로 이동할 경우, 뱀 꼬리를 옮겨줌. 시간에 따른 이동방향 변경 구현한 방법 뱀의 길이: 1로 시작해서 사과를 만날 때마다 증가하는 int 변수. 뱀의 좌표: deque로 관리. len(deque)가 뱀의 길이보다 클 경우, popleft 후 지도에서 뱀을 지워야 한다. (가장 먼저 들어갔던 곳 == 발자취 == 꼬리) 시간 값을 key로 하는 dictionary 를 선언. 매 초마다 value가 있는지 확인한다. 느낀점, 특이사항 문제를 꼼꼼하게 읽어야 한다. '뱀의 ..

BOJ/구현 2021.09.15

9019. DSLR (BFS)

사용한 알고리즘 BFS 접근했던 법 시작점에서 끝 점까지 가는 방법을 출력해야 한다. `True` 와 `False` 로 방문 여부만을 판단하는 일반적인 `visited`리스트를 사용하는 대신 visited = [''] * 10000 를 선언. vstd에 '루트'들을 입력하며 방문처리와 루트 보관을 동시에 한다. vstd[st] 에 아무 값(',')을 채워넣고 BFS 연산 시작. vstd[ed] 가 None이 아닐 때 == 한 번이라도 닿았을 때 vstd[ed]를 출력하고 BFS 종료. 단, vstd[st]에서 임의의 값을 넣고 시작했으므로 적당한 슬라이싱이 필요. 어려웠던 점 '시작점에 방문 처리 안 해도 적당히 잘 풀리겠지' 하다가 틀렸다. 슬라이싱으로 오답을 받았다. D, S, L, R을 최소한의 연..

[8주차] DFS, 분할 정복

한동안은 계속 붉은 여왕이 된 것 같았다. 현상을 유지하기 위해서 끊임없이 전력 질주하는 느낌. 프론트엔드 주간평가가 생각 이상으로 너무 어려웠고, 한동안 주간평가에서 탈락했을 것이라는 불안감에 시달렸다. 체력 저하와 갑자기 등장한 동적 프로그래밍 덕분에 도망치고 싶은 기분이 들었다. 나와 내 코드를 분리해서 생각하지 못했던 것 같다. 물론 내 코드는 채점 100%에서 fail을 띄우고, 특이 케이스에서 Runtime Error 를 뿜거나, 코테 탈락의 쓴맛을 보여줄 수 있다. 하지만 내 코드의 실패는 나의 실패가 아니다. 내 코드의 실패는 각각 다음과 같은 방법으로 해결할 수 있다. 1) 무엇을 어떻게 해야 할지 모르겠다 - 자료구조와 알고리즘을 공부한다 2) 구현이 어렵다 - 다른 사람의 코드나 의사..

[7주차] 1분기 결산

한 달 반이 지났다. 1학기도 무려 4분의 1이 지난 것이다. 난 힘들고 지쳤기 때문에 비교적 비 생산적인 일에 내 시간을 쓸 권리가 있다. 시작할 때 상황 JAVA 1주 수강. 버블소트 구현해봄. 현재 상황 파이썬: 파이썬 자습서 내용들 전부 수강. 카운팅 소트 등, 정렬 알고리즘 몇 개 더 사용할 수 있음. HTML, bootstrap, css 기본 내용 수강. 알고리즘 - DP 공부중. 백준 실버 문제들까ㅣ지는 어렵지 않게 풀이 가능. 느낀 점 개발자 하길 잘 한 것 같다. 이러니 저러니 해도 재미있다. '동기부여 영상'들을 별로 좋아하지 않았지만.. '좋아하는 것을 찾아야 한다'는 말에 전적으로 동의하게 되었다. 하루 10시간씩 코딩 하는게 재미있다. 다른 재미있는 일들도 자주 있었으면 좋겠다.

[6주차] '붉은 여왕'

'현상을 유지하려면 전력질주 해야 한다.' SSAFY를 진행하면서 붉은 여왕의 딜레마를 체감했다. 프로그래밍을 완전 처음부터 배우는 사람에게는 진도가 다소 빠른 감이 있다. 진도를 쳐내고 시험을 준비하면서 하고 싶은 공부까지 하고 나면 밤 11시가 된다. 내일이 되면 또 뭔가 새로운 것을 배우고, 진도를 소화하거나 심화 학습을 위해 전력질주한다. 난이도 자체는 그다지 어렵지 않아서 미묘하다. 이번 연휴에는 즐겁게 놀았다. 버팔로 윙을 1kg 만들었고, 키보드도 주문했다. 타자도 훨씬 빨라진 것 같다. 간절하게 게임이 하고 싶다. 엑스컴을 달리고 싶다. 밥먹고 커피 타고 물 마시는 시간을 제외하고는 '다음 턴에 최고의 결과'를 내는 것에 대해서만 생각하고 싶다. 이산수학도 좀 풀어보고 싶다. 재미있고 만족..