본문 바로가기

Java

(501)
[자바 알고리즘 인터뷰] ch 11 해시 테이블 (5) 완주하지 못한 선수 https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr      풀이 1) 해시 테이블을 이용한 풀이  - 참여한 선수 배열에서 완주한 선수 배열을 제외하면 1명이 남으며, 이 값을 찾아내는 문제다. - 동명이인이 등장할 수 있으므로, 이름을 키로 인원을 값으로 한 해시 테이블로 처리하여 동명이인인 경우에는 해당 키의 값을 +1 해준다.  - 그런 다음 완주한 선수의 이름을 추출해 해시맵에서 하나씩 삭제하면 된다. 값을 -1 하다가 만약 1인 경우 해시맵..
[자바 알고리즘 인터뷰] ch 11. 해시 테이블 (4) 상위 k빈도 엘리먼트 https://leetcode.com/problems/top-k-frequent-elements/description/ - 빈도순으로 k개의 엘리먼트를 추출하라   풀이 1) 빈도수를 저장하고 빈도순으로 엘리먼트 추출  - 각 엘리먼트의 빈도를 추출하고 이를 빈도순으로 저장하거나 정렬한 다음, k번만큼 추출하면 문제를 풀이할 수 있다 . - 각 엘리먼트의 빈도 추출- 입력값 nums를 반복하며 빈도수를 저장할 해시맵 frequencyMap을 선언하고 여기에 빈도를 저장한다. - 처음 빈도를 계산한다면 0으로, 기존에 값이 있다면 그 값을 가져오고 모두 +1을 한다.  //각 엘리먼트의 빈도수를 저장할 해시맵 선언, 엘리먼트=> 빈도수Map frequencyMap = new HashMap();//각 엘리먼..
[자바 알고리즘 인터뷰] ch 11. 해시 테이블 (3) 중복 문자 없는 가장 긴 부분 문자열 https://leetcode.com/problems/longest-substring-without-repeating-characters/description/  - 중복 문자가 없는 가장 긴 부분 문자열(Substirng)의 길이를 리턴하라   풀이 1) 슬라이딩 윈도우와 투 포인터로 크기 조절  - 슬라이딩 윈도우로 한 칸씩 우측으로 이동하면서 윈도우 내에 모든 문자가 중복이 없도록 투 포인터로 윈도우 크기를 조절하면서 풀이해보면 다음과 같다.  - 슬라이딩 윈도우의 각 단계별로 중복 문자가 없는 윈도우의 최대 길이를 순서대로 표시했다.    - 먼저 투 포인터로 문제를 풀이하되, 포인터 2개 모두 왼쪽에서 출발한다. - 각각 왼쪽 시작점에서 출발해 두 번째 포인터(right변수)는 다음과 같이 현재..
[자바 알고리즘 인터뷰] ch 11. 해시 테이블 (2) 보석과 돌 https://leetcode.com/problems/jewels-and-stones/description/  - J는 보석이며, S는 갖고 있는 돌이다. S에는 보석이 몇개나 있을까? 대소문자는 구분한다.   풀이 1) 해시 테이블을 이용한 풀이  - 갖고 있는 돌 stones의 엘리먼트 각각의 개수를 모두 헤아린 다음, jewels의 각 엘리먼트를 키로 하는 각각의 개수를 합산- 먼저 freqs라는 해시 맵을 선언Map freqs = new HashMap(); - 돌의 모음인 stones를 문자 단위로 하나씩 분리해 반복한다. 만약 처음 등장한 문자라면 1을 선언하고, 기존에 있던 문자라면 1을 더한다. //돌(S)의 빈도수 계산for(char s : stones.toCharArray()){ /..
[JAVA] 프로그래머스 체육복 https://school.programmers.co.kr/learn/courses/30/lessons/42862 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr     문제 풀이  - 그리디(greedy) 알고리즘은 최적해를 구하는 방법으로 여러 경우 중 하나를 결정할 때 그 순간이 최적이라고 생각되는 것을 선택하는 방식- 때문에 항상 최적해를 보장해주진 않지만 대부분의 경우 최적해를 찾기 적합한 알고리즘이다.  체육복 프로그래머스 java 자바 문제 풀이 (youtube.com)  - 여벌의 체육복을 최대한 빌려준 뒤 체육복을 가진 학생 수를 구하라 - 여..
[JAVA] 프로그래머스 - 신규 아이디 추천 https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.5단계 new_id가 빈 문자열이라면, new_id에..
[JAVA] 프로그래머스 - 자릿수 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/12931 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr    정답  import java.util.*;public class Solution { public int solution(int n) { int answer = 0; String s = String.valueOf(n); for(int i=0; i   다른 사람의 풀이  23456789101112131415import java.util.*;p..
[JAVA] 프로그래머스 - 약수의 합 https://school.programmers.co.kr/learn/courses/30/lessons/12928 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr    정답  class Solution { public int solution(int n) { int answer = 0; for(int i=1; i