본문 바로가기

알고리즘&자료구조65

프로그래머스 - 게임 맵 최단거리 문제 분석조건1. 상대팀 진영으로 도착하지 못하는 경우 -1 리턴 2. 맵은 n*m 행렬로 주어짐(최대 100*100) 상대방 진영은 무조건 n,m에 위치함 (단, 1*1은 입력으로 주어지지 않음) 3. 자신의 최초 위치도 지나간 칸의 개수에 포함됨 4. 캐릭터는 (1,1)에서 시작로직0.초기값 설정 맵의 크기, 동서남북 방향, 캐릭터가 이동할 큐, 방문처리 1.캐릭터 최초 위치 설정 캐릭터의 시작지점을 큐에 넣고 방문 표시 2.큐에 데이터가 빌때까지 반복문을 돔 캐릭터가 이동할 수 있는 곳이면 이동후 큐에 넣고 방문처리 3.큐가 비면 상대방 진영 확인 dis[n][m]이 0이면 방문을 하지 못했다는 뜻이므로 -1 출력 아니면 dis[n][m] 출력 JAVA 코드import java.util.*;publ.. 2024. 6. 5.
프로그래머스 - 주차 요금 계산 문제 이해조건문제에서 주어진 조건을 잘못 이해하고 넘어가는 경우 코드를 다르게 작성할 수 있으니 초기에 조건을 정확하게 이해하자1. 차량은 In Out을 여러번 할 수 있음 00~23:59 동안의 해당 차량번호가 얼마나 주차장에 머물렀는지 체크 들어갈때마다 기본 주차요금이 계속 더해지는게 아니라 하루동안에 머물렀던 총 시간을 기준으로 계산 로직전체 로직을 세분화시키고 세분화된 로직별로 처리하면서 진행하자0.초기값 세팅Map in Map out List record(차량별 요금 기록) 1.IN 차량이 있으면 시간체크 시작 (O) -> 입차시간 저장, 처음 In인 경우 경과시간 0으로 초기화 2.OUT 차량이 있으면 경과시간 계산 (O) -> in에 해당 차량의 입차시간을 -1 처리(in~out이 한세트로 .. 2024. 6. 5.
프로그래머스 - 바탕화면 정리 문제 분석 바탕화면의 칸은 (1,1) ~ (5,4) 구분되며, 드래그 할 격자점은 (0,0) ~ (6,5)로 구분된다."칸"을 기준으로 이중 for문을 돌다가 #(파일)이 나올때 마다 드래그 최소 시작 지점과 드래그가 끝나는 최소 지점을 계산 드래그를 시작하는 최소 시작 지점의 행과 열 : startDragRow, startDragCol드래그가 끝나는 최소 지점의 행과 열 : endDragRow, endDragCol파일이 나올때 마다 4가지 변수와 비교해서 최소 지점을 갱신한다. Java 코드static public int[] solution(String[] wallpaper) { int[] answer = {}; // 드래그 최소 시작 지점 int startDragRow = Intege.. 2024. 6. 3.
재귀(recursion) *** 재귀란?하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 알고리즘 재귀를 이용해 문제를 풀때는 수학적 귀납법을 이용하면 간결하게 풀 수 있다.제일 앞의 도미노를 쓰러트리면 모든 도미도는 쓰러질 것이다.그런데 왜? 모든 도미노가 쓰러지는가를 설명해보자 첫번째 설명 방법은 제일 앞에 있는 1번 도미노가 쓰러지면 2번도미노, 3번도미노... 순차적으로 쓰러진다는 설명방법이고 두번째 설명 방법은 1번 도미노가 쓰러진다. K번 도미노가 쓰러지면 K+1번 도미노도 쓰러진다 결국에는 모든 도미노가 쓰러진다는 귀납적 방식을 이용한다.  절차지향적 사고방식)// N~1까지 차례대로 출력void func1(int val) { if (val == 0) return; cout  func1(10000...) .. 2024. 5. 2.