목록문제 풀이 (47)
코린이 탈출기
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/EsDfK/btqJrwCfl6n/6cW9mqzoHfwRDnvPFzjUX0/img.png)
문제 바로가기 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net Logic 바이러스는 Virus 리스트에 담는다. 이 중 M개를 골라 조합을 만들고, activate_Virus에 담는다. 바이러스가 아직 안 퍼진 곳(즉, Map에서 0인 부분)의 count를 세어서 virus_count에 저장한다. 활성화 바이러스 조합 각각에 대하여 bfs(virus) 함수를 실행한다. 3-1. 활성화 바이러스를 queue에 넣는다. 3-2. 현재 queue에 들어있는 원소들에 대해서만 한다. -> level 을 계산해주기 위해서 3-3..
문제 바로가기 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com - info[][] 배열: 각 블럭에 부딪혔을 때 기존의 방향이 어떻게 달라지는 지를 저장하고 있음(key: 기존 방향, value: 새로운 방향 / 0: →, 1: ↓, 2: ←, 3: ↑) - warmHole 벡터: 각 warm hole의 (y, x) 쌍을 저장한다 1. 주어진 map의 바깥에 블럭 5를 한줄씩 더 만든다. (5의 모양이 ㅁ이므로 제일 가장자리를 만났을 때 방향을 꺾도록 하기 위해서) 2. map[y][x]가 0인 부분에서 네 가지 방향으로 모두 simulate 한다. in Simulate() 1. 현재 가진 방향으로 옮겨서 ny..
벽돌 깨기 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com crash(): 구슬이 벽돌이 깨뜨릴 때 호출되는 함수. 벽돌이 또 다른 벽돌을 깰 때도 호출됨 removeEmpty(): 벽돌이 다 깨진 후 사이사이의 빈공간을 없애주는 함수 -> 백트래킹으로 구현했음 1. possible 리스트에는 각 열에서 처음으로 깨질 행의 번호가 저장되어 있다. 2. 구슬을 쏠 수 있는 범위(0~W-1)만큼 crash -> removeEmpty를 한다. 다시 재귀로 호출 3. arr와 possibe 다시 원상태로 돌리기 4. 구슬을 쏠 수 있는 횟수만큼 다 쏘거나 그 전에 모든 벽돌이 깨진다면 solution() 종료 -전체 ..
문제 바로가기 2636번: 치즈 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓 www.acmicpc.net 풀이 시간: 2시간 처음에 잘못 생각해서 치즈 기준으로 bfs를 했다. 다시 푸느라 오래 걸렸다 ㅜㅜ 1. 치즈 안에 있는 구멍은 외부 공기와 접하지 않기 때문에 치즈와 바깥공기가 접하고 있는 부분을 찾아내야 한다. 이를 찾아내기 위해 가장자리부분과 인접한 모든 빈 공간을 bfs로 찾는다. 이때 치즈 안에 있는 공간은 당연히 찾아질 수 없다. 이렇게 찾아낸 부분은 visited에 저장한다. 2. visited에는 치즈인 부분(구멍포함)과 바깥부분 이렇게 나뉘게 된다...
문제 바로가기 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 코드 유목민... 여러가지 써보는 중이다.. 얼마전 카카오 코테에서 파이썬으로 했으면 고생고생을 안해도 될 문제가 있었어서 파이썬에 꽂혔당 ㅎ 아직은 익숙하지 않아서 문법 같은 건 그때그때 찾아보면서 하고있다 1. 보물상자의 면이 4개이므로 전체 숫자를 4로 나눠서 rotate_num을 구한다. 2. 4개의 영역으로 숫자들을 잘라서 splitTreasure에 저장한다. -> rotate. 한 칸씩 시계방향으로 이동 3. 2번을 (rotate_num-1)만큼 반복 4. 중복 제거를 해야하므로 splitTreasure에 set을 취한 후 문제에서 원하는..
문제 바로가기 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브�� programmers.co.kr 소요시간 : 50분 - 1시간 1. 대소문자 구분을 하지 않기 때문에 각 str을 모두 소문자로 만들어준다. 2. str을 두 글자씩 끊어서 tmp에 저장하고 tmp가 모두 알파벳으로 돼있다면 str_arr에 저장한다. -> 아스키코드 활용(a~z: 97~122) str_arr 저장형태 : {tmp: tmp 개수} 3. str_arr의 key를 str_key 배열에 넣어두고 이 배열을 순회하며 두 str_arr에 key가 ..
문제 바로가기 코딩테스트 연습 - [1차] 셔틀버스 10 60 45 [23:59,23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59, 23:59] 18:00 programmers.co.kr 소요시간 : 2시간 시간을 어떻게 나타낼 것인지 생각하는 데에서 오래걸렸다 - timeProcess() 함수로 "09:00" 형태의 string을 540(minute)으로 변환한다. - processAnswer() 함수로 숫자형태의 시간을 다시 "xx:xx" 형태로 변환한다. 1. n*m 크기의 2차원 배열 crew_time을 생성한다. 2. new_timetable에 timetable을 숫자형태로..
문제 바로가기 코딩테스트 연습 - 길 찾기 게임 [[5,3],[11,5],[13,3],[3,5],[6,1],[1,3],[8,6],[7,2],[2,2]] [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] programmers.co.kr 걸린 시간 : 1시간 1. nodeInfo 배열에 node 번호를 추가해준다. 2. nodeInfo 배열을 y값 기준으로 내림차순, 같은경우 x값 기준으로 오름차순 정렬한다. 3. myOrder 함수를 재귀적으로 호출하는데, nodeInfo 배열을 돌면서 가장 첫번째 원소의 x값 기준으로 그 값보다 작으면 left 배열에 추가, 크면 right 배열에 추가한다. nodeInfo의 가장 첫번째 원소는 항상 서브트리의 root가 된다. 4. 전위순회인 ..