알고리즘 10

list(ArrayList, LinkedList)

ArrayList ArrayList는 연속된 메모리 공간에 저장된 데이터의 집합이다. 연속된 메모리 공간에 저장되어있기 때문에 cpu cache의 이점을 이용할 수 있다. add 데이터가 add될 때 할당된 메모리 공간에 데이터를 넣다가 할당된 공간이 모자라게 될 경우 더 큰 메모리 공간을 다시 할당해서 지금까지 저장된 데이터를 옮긴 후 다시 데이터를 add합니다. remove 데이터를 삭제할 경우 삭제된 공간 이후에 저장된 모든 데이터를 왼쪽으로 한 칸씩 shift합니다. insert(데이터, 인덱스) 특정 위치에 데이터를 insert하고 싶은 경우 특정 위치 이후의 데이터를 오른쪽으로 한 칸씩 shift합니다. LinkedList LinkedList는 node의 집합으로 이루어져 있으며 node는 v..

알고리즘 2024.02.05

[leetcode] Toeplitz Matrix

https://leetcode.com/problems/toeplitz-matrix/ Toeplitz Matrix - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com row부터 출발해서 diagonal을 따라 시작점과 같은 수인지 찾았고 column부터 출발해서 diagonal을 따라 시작점과 같은 수인지 찾았다. 딱히 for문을 돌리는데 별 고민 안했던 이유는 제약조건이 무난했기 때문이다.. O(n^2)이었지만, n의 최댓값은 20으로 끽해봐야 400번 도는 정도..

알고리즘 2022.10.31

[leetcode] Roman to Int

제약 조건 문자열의 크기는 15 문자열에 들어갈 수 있는 알파벳은 7개뿐.. 아무리 커도 3999까지밖에 안된다.. 그러니까.. I, ...., MMMCMXCIX 까지... 제출한 코드 문제를 제대로 안 읽고 되는대로 풀고 제출한 코드.. 문자열의 크기가 15였기 때문에 시간복잡도가 많이 커질 일이 없다고 생각했고 계산할 필요도 없지 않나 하고 생각함.. import java.util.Map; import java.util.HashMap; import java.util.StringTokenizer; class Solution { public int romanToInt(String s) { int answer = 0; Map roman = new HashMap(); roman.put("I", 1); rom..

알고리즘 2022.10.14

[leetcode] Two Sum

해석) nums라는 정수 배열과 정수 target이 주어졌을 때, 더했을 때 target이 되는 두 개의 숫자 indices(매핑 정보를 저장하는 데이터 공간..? or 인덱스 복수형) 를 리턴하세요. 각 입력값은 정확히 하나의 솔루션을 가진다고 가정하며, 같은 element(요소, 배열 내 구성을 일컫는 말인가봄) 를 두 번 사용하지 마세요. 순서는 아무렇게나 해서 정답을 리턴할 수 있어요. 시간 복잡도) O(n^2) 배열 nums를 이중 for문을 돌려서 하나하나 정답을 알아봐야겠다고 생각했다. 이중 for문이기 때문에 nums.length를 고려하는 부분이 중요했는데, 10000 * 10000 => 1억..으로 1초..? 정도로 보면 될 것 같다. Follow-up 질문이 O(n^2) 시간복잡도보다..

알고리즘 2022.10.13

[프로그래머스] 이진 변환 반복하기

프로그래머스 70129 https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분석 이진 변환을 반복하면서 몇 번 이진 변환을 진행했는지, 이진 변환을 진행하면서 제거한 0의 개수의 합을 answer 배열에 담으면 된다. 이진 변환을 멈추는 조건은 주어진 String s가 "1"이 될 때까지이다. replaceAll을 통해서 "0"을 모두 ""으로 변환하고 replaceAll을 하기 전 문자열과 한 후 문자열의 길이를 비교한다. 또한, 변환한 문자열의..

알고리즘 2022.09.11

[프로그래머스] JadenCase 문자열 만들기

프로그래머스 12951 https://school.programmers.co.kr/learn/courses/30/lessons/12951 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr String 메소드인 toLowerCase + 아스키코드 + StringBuilder를 사용해서 진행하였다. toUpperCase 메소드 대신 아스키코드와 StringBuilder를 사용하였다. 주어진 문자열을 toLowerCase로 모두 소문자로 바꾼 후 맨 첫번째 문자(index = 0)이거나 직전 문자가 공백일 경우 대문자로 변경한다. 이때, 아스키코드가 96이상인지 ..

알고리즘 2022.09.11

[프로그래머스] 숫자 문자열과 영단어

프로그래머스 81301번 https://school.programmers.co.kr/learn/courses/30/lessons/81301 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 분석 one4seveneight을 다시 1478로 바꿔달라는 문제이다. 숫자에 대응되는 영단어의 알파벳 특징을 바탕으로 변환하였다. 주어진 문자열을 for문으로 하나씩 읽어들이면서 zero, one, eight, nine의 경우 첫 알파벳이 고유하다. 따라서 이 영단어를 만나면 곧장 바꿔주고 읽어들인 문자열 수만큼 for문 포인터를 이동시킨다. s로 시작하거나 t, f로 ..

알고리즘 2022.09.08

[백준] 나무 자르기

백준 2805번 https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 프로그래머스 징검다리 건너기 문제를 풀고 이분 탐색이 입력값을 줄이고 문제를 최적화하는데 매우 좋다는 것을 알게 되었다. 입력값을 O(logN)해서 시간복잡도가 매우 줄어들게 된다. 분석 나무 자르기는 이분 탐색을 이용해서 풀어야하는 문제 중 하나이다. 결정 문제이고 Check(x)에서 x의 값에 따라 적어도 M미터의 나무를 집에 가지고 갈 ..

알고리즘 2022.09.04

[프로그래머스] 징검다리 건너기

프로그래머스 64062번 https://school.programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 효율성 부분이 있어서 입력값 개수를 봤더니 stones 배열의 크기가 최대 200,000개이고 각 원소들의 값이 최대 200,000,000이다. 각 stones에 200,000,000씩 들어가 있고 니니즈 친구들의 수는 2억명까지도 될 수 있기 때문에 그냥 배열 돌리기를 해버리면 입력값이 너무 커서 시간 초과가 뜨게 된다. 아래 코드는 그냥 배열 돌리기한 코드이다. 정확성..

알고리즘 2022.09.04

[프로그래머스] 불량 사용자

프로그래머스 64064문제 https://school.programmers.co.kr/learn/courses/30/lessons/64064?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 전처리 + 완전 탐색(조합) 문제로 판단하고 풀었다. 문제에서 경우의 수를 구하라고 나와있었기 때문에 경우의 수를 구할 수 있는 완전 탐색 방식을 선택하였다. 또한, 경우의 수만을 구하는 것이 중점이 아닌 불량 사용자의 아이디를 가려내는 것도 중요했기 때문에 이를 완전 탐색 직전 해야하는 전처리 작업이라고 생각하였다. 풀이 과정 1 (전처리 과정..

알고리즘 2022.09.04