Lv 3. 표 편집
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 테이블에서 행을 선택하고 이동하거나 삭제 및 복원을 처리하는 문제다.각 명령어를 수행하며 최종적으로 테이블의 상태를 반환한다.테이블 크기가 크고,명령어의 수가 많더라도 스택을 활용해 빠르게 동작하도록 설계했다.먼저 TableEditor라는 클래스를 만들어 테이블의 크기와 현재 커서 위치를 관리한다.tableSize는 현재 활성화된 테이블의 총 행 수를,cursor는 현재 커서가 위치한 행을,removed는 삭제된 행의 정보를 저장..
Lv 2. N-Queen
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/12952 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 N이 주어질 때N개의 Queen을 서로 공격할수 없는 경로에 놓는 방법의 수를 구하는 문제다.DFS와 백트래킹을 활용하여 문제를 해결하였다. 1번째로 DFS method다.이문제를 보고 풀이도중 생각이 되는것이하나의 줄에 하나의 Queen이 존재해야한다는 생각이 들었다.0에서 N-1 까지 순회하면서 만약 dfs 의 파라미터인 depth줄에 i 번째 board가놓을수 있는 곳이라면 재귀를 통해 다음 dfs로 depth+1 하여 들어..
Lv 2. 과제 진행하기
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   주어진 과제들의 실행 순서를 정리하는 문제다. 각 과제는 이름, 시작 시간, 실행 시간으로 구성되며,시작 시간은 "HH:mm" 형식을 분 단위로 변환하여 처리된다.입력받은 계획들을 Assignment 객체로 변환한 후,시작 시간 기준으로 오름차순 정렬한다.정렬된 과제를 순서대로 처리하면서 중단된 과제는 스택에 저장하고,조건에 따라 남은 시간을 활용해 다시 실행한다. 현재 과제의 종료 시간이 다음 과제의 시작 시간 이후라면,현재 과제는 중단..
Lv3. 인사고과
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/152995 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr    나는 주어진 점수 데이터를 기반으로 특정 인물(완호)의 순위를 계산하였다.입력으로 주어진 2차원 배열 scores는 각 사람이 받은 두 점수를 나타낸다.완호의 첫 번째 점수와 두 번째 점수는 n과 m에 저장된다.각 사람의 점수와 추가 정보를 저장하기 위해 Person 객체를 사용하며,이를 저장하는 배열 arr를 생성한다.각 Person 객체는 scoreA(첫 번째 점수), scoreB(두 번째 점수), scoreSum(두 점수의 합), ..
Lv 3. 파괴되지 않은 건물
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/92344?language=java 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제를 접하고 우선 구현가능한지 시간복잡도 계산을 해보았고 최대 1000*1000 배열에 1000*1000 size의 skill 25만개 기준 2500억즉 시간초과로 불가능할것 같아 여러 방면으로 고민하고 문제 풀이방법을 찾아보았지만 찾을 수 없었다. 그러던 와중 아래의 블로그를 참고하여 풀이방법을 알아낼 수 있었고아래의 블로그에서 제시한 '누적합' 알고리즘을 활용하여 쉽게 풀이할 수 있었다. '누적합' 알고리즘..
Lv 3. 합승 택시 요금
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/72413 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 n개의 정점이 주어지고 각 정점에 번호가 부여되며 s 는 출발지점a는 a의 집정점, b는 b의집 정점으로 정해졌을때또한 모든 간선에 음의 가중치가 없을때 간선의 가중치가 택시비를 의미하고 합승을 제안하기위해 a가 b와 합승할 수 있는경로와 방법을 찾아 최적의 택시비를 찾는 문제이다. 우선 음의 가중치가 없다는 생각에 다익스트라를 구현할 생각이었다. 다익스트라는 한 정점에서 모든 정점으로 가는 모든 최단 거리를 구하는것인데이 다익스..
Lv 3. 자물쇠와 열쇠
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이문제는 자물쇠에 해당하는 조합을 찾는 문제이다.key[][] 와 lock[][] 이 주어질때 key를 90도 단위로 돌려가며lock에 맞추었을때 빈틈없이 맞아 진다면 true 를 반환하고 false를 반환하는문제다. 단순 구현 풀이법으로 문제를 풀이하였으며 회전하는 과정에서 90도, 180도, 270도 회전시 어떻게 체크를 해줄지생각을 해낸다면 쉽게 풀이할 수 있다. int[][] checkLock 을 선언하고 key를 90도로 돌려가며 ..
Lv 3. 순위
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/49191 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 플로이드-워셜 알고리즘을 사용해 해결하였다.승패 정보를 바탕으로 선수들의 순위를 계산할 수 있는지를 판단하고,정확한 순위를 알 수 있는 선수의 수를 반환한다. 순위는 승패 관계를 통해 간접적으로 계산되며, 모든 선수 간의 관계를 완전 탐색하여 결정한다.먼저 graph 배열을 초기화하여 선수 간의 승패 관계를 저장한다.승리 관계는 1로, 패배 관계는 -1로 설정되며,초기 입력값을 기반으로 승패 정보를 저장한다.이후 플로이드-워셜 알..
p.퍼즐게임챌린지
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/340212 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 이분 탐색을 활용해 난이도 조정을 통해 주어진 시간 제한 안에서 플레이 가능한 최소 레벨을 구하는 문제를 해결한다. solution 메서드는 난이도의 범위를 설정하고, 이분 탐색을 통해 해당 레벨에서 플레이 시간이 조건을 만족하는지를 검사하며최적의 레벨을 찾는다.calculate 메서드는 특정 레벨에서 플레이 시간을 계산하는 함수다.난이도가 레벨보다 높은 경우, 난이도 차이만큼 추가 플레이 시간이 발생하며,이 시간은 현재 및 이..
Lv 3. 풍선 터트리기
·
Algorithm & Data Structures/Programers
https://school.programmers.co.kr/learn/courses/30/lessons/68646?language=java 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   문제를 처음 접했을 때 어떤 규칙이 존재하는지를 길게 고민하였다.좌 우 에서 떨어지면 떨어질수록 최소 비교횟수가 늘어나는 규칙을 찾아내었고주어진 값이 전체 array 에서 몇 번째로 최소인가를 판단하여 풀이방법을 고민하였다.고민이 길어지다가 왼쪽 최소, 오른쪽 최소값중 한번이라도 만족한다면 마지막으로 남을 수 있는가능성이 존재한다는 것을 발견하였고이를 토대로 왼쪽 최솟값 array, 오른쪽 최솟값 array를 생성하..