분류 전체보기 381

[백준 - 14889] 스타트와 링크 - Java

문제 설명 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 접근 방법 해당 문제에서는 전체 n명(짝수)의 사람과 i번 사람 및 j번 사람이 같은 팀에 속했을 때의 능력치가 주어졌을 때 그리고 n명의 사람이 반으로 나누어 팀을 이루었을 때 각 팀의 능력치 차이가 가장 적은 값을 요구하고있습니다. 처음 이 문제를 봤을 때 어떤 규칙성을 찾기 보다도 브루트포스 및 백트래킹을 이용해야겠다는 생각을 우선적으로 했습니다. 지금 생각해보면 어리석었지만 저는 각 팀원별 순서를 따지는 경우의 수인 순열을 이용하면서 모든 경우의 수를 따졌었습니다. ..

Algorithm/BOJ 2022.07.14

[백준 - 15683] 감시 - Java

문제 설명 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 접근 방법 해당 문제에서는 각각의 CCTV의 동작별로 사무실을 감시했을 때 해당 사무실의 사각지대가 가장 최소일 때의 값을 요구하고 있습니다. 우선 5개의 CCTV별로 각각의 동작 방식들을 구현했습니다. 기본적으로 모든 CCTV는 동, 서, 남, 북 일직선 방향으로 감시를 할 수 있으므로 기본적인 동작들을 구현한 뒤 각각의 CCTV별로 이 동작들을 활용하도록 했습니다. 이후 사무실 데이터를 입력받을 때 CCTV 정보들을 List에 저장시켰습니..

Algorithm/BOJ 2022.07.14

2022년 7월 1주차(7/4 ~ 7/8) Weekly I Learned "마스터즈 코스 수료 이후의 첫 번째 주간"

지난 한 주 되돌아보기 코드스쿼드 2022 마스터즈 코스를 수료한지도 벌써 1주일이 지났다. 사실 수료한 이후로는 당분간 회고글은 작성하지 않으려고 했었으나, 마스터즈 코스 간 회고글을 작성하던 것이 여러모로 많은 도움이 되었기 때문에 다시 작성하게 되었다. 다만, 마스터즈 코스 때처럼 하루에 하나씩 작성하기 보다는 한 주를 되돌아보는 차원에서 WIL(Weekly I Learned)를 작성하고자 한다. 수료 직후 정신없었던 주말 7월 1일 수료하고나서는 당분간 놀고 싶은 마음이 있었지만 수료 회고글 작성과 연이은 주말 코딩테스트(원티드 주관 쇼미더코드, 프로그래머스 주관 데브매칭)로 인해 수료 직후 주말에는 나름 정신이 없었다. 수료 회고글을 코드스쿼드 슬랙과 같은 기수 디스코드에 공유했었는데, 정말 많..

[프로그래머스] 게임 맵 최단거리 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 해당 문제는 2차원 그래프 상에 특정 출발 지점에서 특정 도착 지점까지 가는 최단 경로를 구하는 문제로서 BFS(너비 우선 탐색)를 이용하여 해결할 수 있었습니다. 도착 지점은 (0, 0)으로, 출발 지점은 (n, m)으로 정해져있으므로, 처음 노드의 좌표를 (0, 0)으로 초기화 해준 후 이를 기점으로 동, 서, 남, 북 방향으로 너비 우선 탐색하도록 했습니다. 이때 탐색의 제외 대상으로는 맵을 이탈하는 경우, 기존에 방문했었던 좌표, 벽인 경우가 있습니다. 탐색 시 도착 지점 (n, ..

[프로그래머스] 큰 수 만들기 - Java

문제 설명 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방법 해당 문제에서는 특정 수가 문자열로 주어졌을 때 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 요구하고 있습니다. 제가 접근했었던 방법은 주어진 문자열을 순회하면서 앞선 숫자가 뒤에 나오는 숫자보다 작을 경우 해당 숫자를 지워나가는 방식으로 접근하는 것이었습니다. 이때 뒤에 나오는 숫자보다 앞선 숫자가 더 크다면 제거할 수 있는 수(k)의 여분이 있는 경우에 대해서만 추가적으로 뒤에 나오는 숫자들을 탐색하도록 했고 이때 나오는 숫자 보다 작다면, 앞선 숫자를 제거하였습니다. 다만..