알고리즘
-
[프로그래머스] 정사각형으로 만들기알고리즘 노트 2023. 12. 13. 09:15
주어진 정수형 2차원 배열에서 열과 행의 길이가 같아지도록 값을 변경하면 됩니다. 행이 길면 열에 0을 추가하고 열이 길면 행에 0을 추가하면 됩니다. 즉, x와 y의 길이가 같아지도록 하면 됩니다. 제 풀이는 아래와 같습니다. [문제풀이] 1. 우선 x와 y 중 더 긴 기준 값을 구합니다. 2. 새로운 정수 2차원 배열을 만들어 결과값을 담을 그릇으로 준비해줍니다. 3. x와 y를 기준으로 반복문을 돌며, x보다 y가 길면 x에 0으로 구성된 배열 요소를 추가하고, y가 더 길면 각 요소의 끝에 0을 추가해줍니다. 위와 같이 풀어도 정답은 될 수 있으나 조금 더 쉽게 구현하기 위해선 arraycopy를 사용하면 됩니다. System의 arraycopy 메소드는 (기준배열, 기준배열의 시작점, 신규배열,..
-
[프로그래머스] 정수를 나선형으로 배치하기알고리즘 노트 2023. 12. 12. 10:42
주어진 행과 열의 수 만큼의 영역에서 나선형을 돌며 1씩 증가하면 됩니다. 위 내용으로 유추해볼 때 나선형의 특정 영역에서 연산이 처리되어야 할 겁니다. 아래 그림을 먼저 보시죠. 배열의 인덱스를 x와 y라고 지칭했을때, 첫번째 이동 경로인 1에서 2는 x는 그대로 두고 y가 증가합니다. 즉, [0, 0], [0, 1], [0, 2], [0, 3], [0, 4] 순으로 y가 증가하죠. 그리고 두번째 이동 경로인 2에서 3은 y는 그대로 두고 x가 증가합니다. 즉, [1, 4], [2, 4], [3, 4], [4, 4] 순으로 x가 증가하죠. 3에서 4는 1에서 2의 역순으로 y가 줄어들고, 4에서 1은 2에서 3의 역순으로 x가 감소합니다. 코드를 보면 다음과 같습니다. n을 회전 기점으로 사용하기 때문..
-
[프로그래머스] 배열의 원소만큼 추가하기알고리즘 노트 2023. 11. 3. 11:38
각 원소의 숫자만큼 같은 값을 만들어내는 방식으로 사용하면 됩니다. for문을 중첩으로 구현하면 매우 쉽습니다. [문제풀이] 1. 가변적으로 데이터를 넣을 수 있는 List를 만들어줍니다. 2. for문을 중첩으로 구현하여 arr배열의 a를 꺼내 그 만큼의 for loop를 돌면서 answer에 a를 add 시켜줍니다. 3. answer 리스트를 int형으로 변환하여 배열로 반환합니다. 위 방식을 보다 쉽게 푸는 방법은 Collections.nCopies() 메소드를 사용하는 것입니다. Copies() 메소드를 통해 지정한 개체의 복사본 n개로 구성된 immutable list를 반환하는 용도로 사용할 수 있습니다. 이에 힌트를 얻어 다시 코드를 작성해보면 다음과 같이 구현할 수 있습니다. [문제풀이] ..
-
[프로그래머스] 왼쪽 오른쪽알고리즘 노트 2023. 10. 24. 10:01
문자열 l과 r을 기준으로 문자열을 왼쪽으로 자를지, 오른쪽으로 자를지 결정하는 로직입니다. 이 로직을 구현함에 있어서 객체지향 생활 체조 원칙을 위배하지 않으려 노력해보았습니다. 여기서 사용된 원칙은 indent는 한 단계만, else 예약어 사용 금지 조건이었습니다. [문제풀이] 1. IntStream의 range를 통해 loop를 만들고, filter와 map을 통해 첫번째 l 또는 r의 위치를 가져옵니다. 그렇지 않다면 -1을 리턴합니다. 2. Early return 패턴으로 아닐 경우 바로 리턴합니다. 3. "l"을 기준으로 맞다면 0부터 index, "l"이 아니라면 오른쪽을 Copy하여 리턴합니다.
-
[프로그래머스] 2의 영역알고리즘 노트 2023. 10. 23. 11:36
주어진 배열에서 제일 처음 나오는 2와 가장 마지막에 나오는 2의 중간 배열 값을 구하면 되는 문제입니다. 추가적으로 2가 없다면 -1을 리턴하라고 하네요. [문제풀이] 1. IntStream의 range함수를 통해 배열의 요소값이 2인 index를 구합니다. 2. 구해진 index배열의 길이가 0이라면 -1을 바로 반환합니다. 3. 그렇지 않다면 IntStream의 rangeClosed함수로 index의 첫번째 값부터 index의 마지막 값까지를 arr의 인덱스 값으로 활용하여 int형 배열을 반환합니다.
-
[프로그래머스] 배열 만들기 3알고리즘 노트 2023. 10. 23. 10:35
배열 하나를 가지고 두 가지 조건에 맞추어 새로운 배열을 만들어내면 되는 문제입니다. 결국 두 조건으로 두 개의 배열을 만들고 합쳐주면 됩니다. [문제풀이] 1. Arrays.copyOfRange 함수를 이용해 배열 1, 배열 2를 만들어줍니다. 2. 배열1과 2를 합치기 위해 Stream.of()함수를 가지고 스트림으로 만들어 줍니다. 3. flatMapToInt()를 통해 IntStream으로 변경한 이후 toArray를 이용해 배열로 반환해줍니다. 여기에서 해당 코드의 문제점은 Stream 클래스를 선언적으로 이용했다는 점입니다. 다음과 같이 수정이 가능할 것 같습니다. 풀리는 방식은 동일합니다. 다만 Stream.of()를 통해 두 배열을 하나의 스트림으로 만들 것이 아니라, intervals배열..