김지팡의 저장소
article thumbnail
K번째 수
알고리즘 2022. 8. 31. 21:45

이번 문제를 풀면서 Arrays.copyOfRange() 메서드를 알게 되었다. 사용법은 Arrays.copyOfRange(배열, start, end)이다. copy를 시작할 start 인덱스 지점과 end 지점 -1까지 copy를 하여 배열에 저장할 수 있다! 약간 Python으로 치면 배열 슬라이싱이랑 비슷한 느낌이었다. 물론 Python의 슬라이싱은 배열을 말 그대로 잘라주는 것이라 위의 메서드와는 분명히 다르다는 것을 알아두자!(자바도 슬라이싱 있으면 을매나 좋을꼬,,) ✏️ 뭐,, 프로그래머스를 많이 풀어본 것도 아니지만 한동안 서버 개발 공부를 한답시고 놓았다가 거의 8개월 만에 다시 해보니 와우,, 진짜 꾸준함이 중요하다는 것을 다시 한번 느끼게 되었다 'ㅅ' 그리고 요즘 생각하는 것이 대학..

article thumbnail
관점지향 프로그래밍
TIL 2022. 6. 10. 01:19

AOP는 Aspect Oriented Programming(관점 지향 프로그래밍)의 약어로 객체지향 프로그래밍을 더욱 발전시키기 위한 개념이다. 관점 지향은 로직을 기준으로 핵짐적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다. 예로, 핵심 관점은 적용하고자 하는 핵심 비즈니스 로직이다. 부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 로깅, 보안, 트랜잭션 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화 하는 것은 코드들을 부분적으로 나누어 모듈화 하겠다는 의미이다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는데 이것이 횡단 관심(Crosscut Concerns)이라 한다. Core Concern(핵..

article thumbnail
프로그래머스 - 두 개 뽑아서 더하기
알고리즘 2022. 3. 8. 18:00

배열에 서로 다른 인덱스에 저장된 값을 임의로 2개 뽑아 나올 수 있는 모든 값을 오름차순으로 정렬하여 반환하는 함수이다. 코드를 보며 설명하도록 하겠다. 배열에 저장된 값들 중에서의 모든 경우의 수를 따지기 위해 중첩 for 반복문을 이용하였는데, 이 문제는 ArrayList 객체를 사용하여 해결하였다. ArrayList 객체의 메서드 중 indexOf() 메서드를 사용하였다. indexOf() 메서드는 파라미터 안에 인자를 주어 해당 값이 ArrayList 객체 안에 존재하면 그 값이 저장되어있는 인덱스 번호를 리턴하고 그 값이 만약 없다면 -1을 리턴하게 된다. 반복문을 통해 모든 경우의 수를 따지면서 indexOf() 메서드를 사용하여 이미 존재하지 않는다면 즉, 그 값이 이미 ArrayList ..

article thumbnail
프로그래머스 - 최소직사각형
알고리즘 2022. 3. 4. 22:37

이차원 배열 sizes를 받아 배열 안에 저장된 값들 중 모든 명함 크기를 수용할 수 있는 크기 중 가장 작은 크기를 계산하여 반환하는 함수이다. 코드를 보며 설명하도록 하겠다. 현재 기준 역대 level 1 프로그래머스 문제들 중 가장 긴 코드이다. 우선 어떻게 solution을 내려고 했는지에 대해서 코드의 큰 틀을 설명하도록 하겠다. 모든 경우의 수 즉, 모든 크기의 명함을 수용하기 위해서는 가장 큰 값을 구해야 한다. 그 이유는 문제의 설명에 명함을 눕히는 것이 가능하다고 되어있는데, 이점을 이용해 지갑의 크기를 줄일 수 있다. 이해를 돕기 위해 첫 번째 입출력 예를 통해 예시를 보이겠다. 첫 번째 입출력은 [[60, 50], [30, 70], [60, 30], [80, 40]]이고, 가장 큰 값..

article thumbnail
프로그래머스 - 같은 숫자는 싫어
알고리즘 2022. 2. 28. 18:00

int 타입 배열 arr에 저장되어있는 값들 중 연속된 값들은 제거하고 남은 수들을 반환하는 문제이다. 코드를 보며 설명하도록 하겠다. 코드에 대해 설명하면 먼저 인접해있는 두 인덱스에 저장된 값들을 비교하여 같으면 count 변수를 증감시키고 같지 않다면 다시 count를 0으로 초기화한다. 이때, reload 변수를 증감시킨다. reload 변수를 증감시키는 이유는 인접해있는 두 변수가 다른 상황이 몇 번 오는지를 확인하기 위해서이다. 하지만 여기서 주의해야 할 점은 마지막 인덱스 번호 뒤로는 더 이상 존재하는 인덱스가 없기 때문에 대조할 비교군이 없다. 그렇기 때문에 reload의 값을 하나 더 증가시켜야만 정확한 측정을 할 수 있다. 이해를 돕기 위해 하나의 예를 들겠다. 이렇게 배열의 크기를 몇..

article thumbnail
프로그래머스 - 소수 찾기
알고리즘 2022. 2. 25. 21:48

int 타입 변수 n으로부터 입력받은 값을 가지고 1부터 n사이에 있는 자연수 사이에서 소수의 개수를 찾는 문제이다. 코드를 보며 설명하도록 하겠다. 우선 코드를 살펴보기 전 소수에 대해서 이야기를 하자면 소수는 자기 자신을 나누어 떨어지게 하는 숫자가 1과 자기 자신을 제외하고 존재하지 않는다면 그 숫자를 소수라고 한다. 이를 확인하기 위해 for 중첩 반복문을 사용하였다. i % j가 0이라면 나누어 떨어지는 것이기 때문에 반복을 통해 나누어 떨어지지 않는 수를 찾았다. 저 코드에서 만약 6, 9, 13번째 줄의 코드들이 존재하지 않는다면 이 코드에 문법적인 오류는 없지만 제대로 된 값을 반환받지는 못한다. 그 이유는 8번 줄의 if 조건문으로 인해 1과 자기 자신(i)을 제외한 사이의 숫자들 중 i..

728x90