전체 글
-
[프로그래머스][숫자 게임]알고리즘 2023. 2. 8. 19:58
문제 설명 xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로 자연수를 하나씩 부여받습니다. 각 사원은 딱 한 번씩 경기를 합니다. 각 경기당 A팀에서 한 사원이, B팀에서 한 사원이 나와 서로의 수를 공개합니다. 그때 숫자가 큰 쪽이 승리하게 되고, 승리한 사원이 속한 팀은 승점을 1점 얻게 됩니다. 만약 숫자가 같다면 누구도 승점을 얻지 않습니다. 전체 사원들은 우선 무작위로 자연수를 하나씩 부여받았습니다. 그다음 A팀은 빠르게 출전순서를 정했고 자신들의 출전 순서를 B팀에게 공개해버렸습니다. B팀은 그것을 보고 자신들의 최종 승점을 가장 높이는 방법으로 ..
-
[DFS][부분집합]알고리즘 2023. 2. 5. 14:00
public class Subset { static int n; static int[] ch; public void DFS(int L) { if(L == n+1){ String tmp = ""; for(int i = 1; i 0) System.out.println(tmp); }else{ ch[L] = 1; DFS(L+1); ch[L] = 0; DFS(L+1); } } public static void main(String[] args) { Subset T = new Subset(); n = 3; ch = new int[n+1]; T.DFS(1); } } 코드에 대한 설명을 영상으로 남겨놨습니다. [https://www.notion.so/d45e6af251f740ae91e0fe4e497a59f8]
-
[DFS][스택프레임][재귀함수]알고리즘 2023. 2. 3. 13:46
스택 프레임은 매개변수, 지역변수, 복귀 주소를 갖고 있다. 스택 프레임은 백트래킹이라는 알고리즘을 사용할 수 있다. 위 코드는 9번 라인에서 함수 호출로 인해 스택프레임에 DFS(n-1) 함수가 저장되어 있다가 if(n==0) 조건으로 인해 DFS() 함수가 return 되면서 위에서부터 차례대로 9~12번 까지 로직을 실행하게 되면서 1 2 3 이라는 값을 출력하게 된다. 위 코드는 전 그림과 다르게 DFS(n-1) 함수가 출력 코드 위에 아래에 선언되어 있게되면서 3 2 1이라는 결과를 출력한다.
-
[프로그래머스][lv2] 영어 끝말잇기 Java알고리즘 2023. 2. 2. 16:44
문제 설명 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전에 등장했던 단어는 사용할 수 없습니다. 한 글자인 단어는 인정되지 않습니다. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다. 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다. 2번 사람이 자신의 첫 번째 차례에 ..
-
[프로그래머스][lv2] 멀쩡한 사각형 Java알고리즘 2023. 2. 1. 17:20
문제 설명 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다.가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하는 solution..
-
[프로그래머스][lv2] 점프와 순간이동 Java알고리즘 2023. 1. 31. 19:20
문제 설명 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다. 아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값을 return..
-
[프로그래머스][lv2] 방문길이 Java알고리즘 2023. 1. 31. 16:15
문제 설명 게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다. U: 위쪽으로 한 칸 가기 D: 아래쪽으로 한 칸 가기 R: 오른쪽으로 한 칸 가기 L: 왼쪽으로 한 칸 가기 캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다. 예를 들어, "ULURRDLLU"로 명령했다면 1번 명령어부터 7번 명령어까지 다음과 같이 움직입니다. 8번 명령어부터 9번 명령어까지 다음과 같이 움직입니다. 이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다. 예를 들어 위의 예시에서 게임 캐릭터가 움직인 길이는 9이지만,..
-
length, length(), size() 차이Java 2023. 1. 30. 14:54
1. length - arrays(int[], double[], String[]) - length는 배열의 길이를 알고자 할때 사용된다. int n = 19; int[] arr = new int[n]; int tmp = arr.length; // tmp = 19 2. length() - String related Object(String, StringBuilder etc) - **length()**는 문자열의 길이를 알고자 할때 사용된다. 3. size() - Collection Object(ArrayList, Set etc) - **size()**는 컬렉션프레임워크 타입의 길이를 알고자 할때 사용된다.