lovesm135의 등록된 링크

키자드에 등록된 총 137개의 포스트를 확인하실 수 있습니다.

Naver Blog

프로그래머스 숫자 게임 - java

그리디 문제이다. A와 B를 오름차순으로 정렬하고, A에서 나온 선수가 가진 숫자와 B에서 나온 i번째 선수가 가진 숫자의 차이가 가장 작게(greedy) 큰 경우만 승점을 획득한다. B에서 이길 수 있는 카드를 모두 선보이고나서, 나머지의 경우엔 승점을 포기한다. import java.util.*; class Solution { public int solution(int[] A, int[] B) { int answer = 0; Arrays.sort(A); Arrays.sort(B); int i = 0; for (int aScore : A) { for ( ; i < B.length ; i++){ if (aScore < B[i]) { answer++; i++; break; } } if (i == B.length) { break; } } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/chal

Naver Blog

프로그래머스 다리를 지나는 트럭 - java

import java.util.*; class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { int answer = 0; int queueIdx = 0; int timer = 0; int truckWeightsTotalOnBridge = 0; // Integer [truck weight][on bridge time][off bridge time] LinkedList<Integer[]> trucksOnBridge = new LinkedList<>(); int trucksOffBridgeCount = 0; // 트럭이 다 지날 때까지 loop while (trucksOffBridgeCount < truck_weights.length) { timer++; // 다리에 올라와 있는 트럭 중 선두에 있는 트럭이 다리를 다 지나갔다 // trucksOnBridge queue에서 제거하고 t

Naver Blog

Collections.sort()와 lambda - java

https://velog.io/@g00dluckroon/Java%EC%97%90%EC%84%9C-%EC%A0%95%EB%A0%AC%EA%B3%BC-lambda Java에서 정렬과 lambda 자바에서 정렬하는 여러가지 방법을 정리합니다.더불어 람다에 대해서도 알아봅니다. velog.io 자바8부터는.. 자바 8부터 더 간단한 람다라는 문법을 지원합니다. 람다는 익명함수의 발전된 형태라고 볼 수 있습니다. 더 나아가서 메서드참조라는 것도 지원합니다. 그리고 자바8에서 default method라는 것이 새로 생겼습니다. 자바 8 이전에 인터페이스는 메서드를 선언만 하고 구현은 하면 안되었지만 인터페이스에서 default 키워드를 붙인 메서드는 몸통을 구현해도 됩니다. 자바 8의 List 인터페이스에 다음처럼 한번 감싸주는 default method가 추가되었습니다. 따라서 Collections.sort(리스트) 형식으로 호출할 필요가 없이 리스트에서 바로 메서드를 호출할 수 있게 됐습

Naver Blog

SortedSet (cf. TreeSet) - java

https://www.daleseo.com/java-sorted-set/ [자바] SortedSet 사용법 Engineering Blog by Dale Seo www.daleseo.com https://heedipro.tistory.com/241 자바 SortedSet, TreeSet Hackerrank에서 자바 과정 연습하던 중에 문자열과 정수 값 하나를 입력받아 해당 크기의 문자열들을 뽑아내어 정렬해야 하는 문제를 풀게 되었다. 예를 들어, 문자열 javaworld 와 정수 3이 주어진다면 jav, ava, vaw, awo, wor, orl, rld 의 문자열로 파싱 후 이들을 사전 순으로 정렬해야 하는 것 ! 결과 : ava, awo, jav, orl, rld, vaw, wor 문자열 파싱은 어렵지 않았는데 Arrays 클래스를 임포트 하지 못하는 상황이었어서 정렬이 문제였다. Discussion을 참조해 ... heedipro.tistory.com SortedSet은 원소들이

Naver Blog

프로그래머스 뒤에 있는 큰 숫자 - java

힌트 1. 현재 확인한 어떠한 숫자를 어느 자료구조에 저장하고, 나중에 어떻게 활용하느냐가 관건인 문제이다. 힌트 2. 현재 확인한 숫자의 인덱스는 상관 없고, 저장되었던 숫자와 비교하는 알고리즘을 사용한다. 힌트 3. 그 자료구조는 어떤 순서에 따라 입출력이 된다. 힌트 4. 주어진 배열의 마지막부터 확인한다. 테스트케이스: [2, 3, 3, 5] 2 (2 push) 3 (3 push) 3 5 (5 push) 5 5 answer: [3, 5, 5, -1] 테스트케이스: [9, 1, 5, 3, 6, 2] 1 (1 push) 3 (3 push) 5 (3 pop & 5 push) 5 2 (2 push) 6 (2 pop & 6 push) 6 6 6 9 (1, 5, 6 pop & 9 push) answer: [-1, 5, 6, 6, -1, -1] 유사 문제: https://blog.naver.com/lovesm135/223054957017 프로그래머스 주식가격 - java 유사 문제 : 두

Naver Blog

프로그래머스 가장 큰 수 - java

규칙을 찾아본다. import java.util.*; class Solution { public String solution(int[] numbers) { String answer = ""; Integer[] numbersWrapper = Arrays.stream(numbers).boxed().toArray(Integer[]::new); Arrays.sort(numbersWrapper, (o1, o2) -> { String num1 = o1+""+o2; String num2 = o2+""+o1; // 앞뒤로 붙여봐서 더 큰걸로 (내림차순) return Integer.parseInt(num2) - Integer.parseInt(num1); }); //System.out.println (Arrays.toString(numbersWrapper)); boolean isAllZeros = true; for (Integer num : numbersWrapper) { answer = answer

Naver Blog

프로그래머스 단어 변환 - java

dfs 구현 문제이다. import java.util.*; class Solution { boolean DEBUG = false; int mMinTrial = Integer.MAX_VALUE; public int solution(String begin, String target, String[] words) { int answer = 0; boolean isExist = false; for (String word : words) { if (word.equals(target)) { isExist = true; break; } } if (!isExist) { return 0; } boolean[] visited = new boolean[words.length]; dfs(begin, target, words, visited, 0); return mMinTrial; } void dfs (String begin, String target, String[] words, boolean[] vis

Naver Blog

프로그래머스 주식가격 - java

두 stack을 이용한다. 한 stack에는 price를, 다른 stack에는 recordedTime (주식 가격이 입력된 시간)을 입력한다. prices 반복문을 돌면서, 현재 시각의 price가 stack 최상단에 저장된 price보다 가격이 낮은 경우 두 stack에서 각각 price와 recordedTime을 빼면서 answer array에 경과한 시간(duration)을 기록한다. (이 때 answer array의 index는 recordedTime) 유사 문제: https://blog.naver.com/lovesm135/223065839932 프로그래머스 뒤에 있는 큰 숫자 - java 힌트 1. 현재 확인한 어떠한 숫자를 어느 자료구조에 저장하고, 나중에 어떻게 활용하느냐가 관건인 문제이... blog.naver.com import java.util.*; class Solution { boolean DEBUG = false; public int[] solution(int

Naver Blog

프로그래머스 땅따먹기 - java

dynamic programming이다. 익숙해지는 방법: 1. memoization을 생각한다(배열에 더해나간다). 2. 반대로 생각하는 방법을 training 한다 (위에서 아래로 더하는 방법 X, 현재 row에서 row-1 값들 중 최선을 선택 O). import java.math.*; class Solution { int solution(int[][] land) { // dynamic programming int[][] dp = new int[land.length+1][4]; // row에서 선택할 수 있는 row-1의 3개의 col 중에서 최선의 선택만 계속해서 반복해서 더한다 for (int i = 0 ; i <= land.length ; i++) { if (i < land.length) { dp[i][0] = land[i][0]; dp[i][1] = land[i][1]; dp[i][2] = land[i][2]; dp[i][3] = land[i][3]; } if (i >

Naver Blog

프로그래머스 스킬트리 - java

import java.util.*; class Solution { boolean DEBUG = false; void log(String s) { if (DEBUG) { System.out.println(s); } } public int solution(String skill, String[] skillTrees) { int answer = 0; // two pointer Character[] skillOrder = new Character[skill.length()]; HashSet<Character> skillSet = new HashSet<>(); for (int i = 0 ; i < skill.length() ; i++) { skillOrder[i] = skill.charAt(i); skillSet.add(skill.charAt(i)); } for (String skillTree : skillTrees) { int skillOrderIdx = 0; for (int i = 0 ;

Naver Blog

프로그래머스 방문 길이 - java

Set을 써보자. import java.util.*; class Solution { boolean DEBUG = false; void log(String s) { if (DEBUG) { System.out.println(s); } } public int solution(String dirs) { int answer = 0; // Set을 써보자 HashSet<String> newRoutes = new HashSet<>(); int x = 0, y = 0; for (int i = 0 ; i < dirs.length() ; i++) { String route = getRoute(dirs.charAt(i), x, y); if (!route.equals("stop")){ newRoutes.add(route); int[] position = getPosition(dirs.charAt(i), x, y); x = position[0]; y = position[1]; log(route); log(

Naver Blog

프로그래머스 등굣길 - java

Dynamic Programming (기억하며 풀기) import java.util.*; class Solution { boolean DEBUG = false; void log(String s) { if (DEBUG) { System.out.println(s); } } public int solution(int m, int n, int[][] puddles) { int answer = 0; // map의 0행 무시, 0열 무시 double[][] map = new double[n+1][m+1]; // 웅덩이 좌표 저장, -1로 세팅 // 웅덩이가 0개일 경우 제외 if (puddles[0].length != 0) { for (int i = 0 ; i < puddles.length ; i++) { // puddle[i][0] : x좌표 // puddle[i][1] : y좌표 map[puddles[i][1]][puddles[i][0]] = -1.0; } } // n: 세로길이 // m:

Naver Blog

프로그래머스 모음사전 - java

패턴을 찾아본다. 패턴을 찾아보면 55 , 54 , 53 , 52 , 51 , 50 과 관련된 패턴이 보인다. switch문을 이용해서 문자의 각 위치에 대해 accumulator를 찾은 다음 switch문을 이용해서 'U' 'O' 'I' 'E' 'A' 순서대로 accumulator를 중복해서 더하도록 한다. (마지막 a는 1만 증가) 예시: OE 'O' accumulator: 781 781*3 + 1 'E' accumulator: 156 156*1 + 1 답: 2501 class Solution { public int solution(String word) { /** a : 1 aa : 2 aaa : 3 aaaa : 4, aaaaa : 5, aaaae : 6, aaaai : 7, aaaao : 8, aaaau : 9, aaaa : 4, 4 + 6*0 aaae : 10, 4 + 6*1 = 4 + (5 + 1) aaai : 16, 4 + 6*2 aaao : 22, 4 + 6*3 aaa

Naver Blog

프로그래머스 [1차] 프랜즈4블록 - java

문제가 지시하는 대로 따라가면서 코딩한다. import java.util.*; class Solution { public int solution(int m, int n, String[] board) { int answer = 0; int height = m, width = n; char[][] charBoard = new char[height][width]; // default: false boolean[][] removalFlag = new boolean[height][width]; boolean isRemoving = false; for (int i = 0 ; i < height ; i++) { for (int j = 0 ; j < width ; j++) { charBoard[i][j] = board[i].charAt(j); } } do { // for (int i = 0 ; i < height ; i++) { // for (int j = 0 ; j < width ; j++) {

Naver Blog

프로그래머스 - 게임 맵 최단거리 - java

2차원 배열 미로에서 최단거리(경로) 찾기 문제 bfs로 풀되, 1. 각 경로에 현재 좌표(y,x)와 현재까지 이동한 칸 수를 저장해야 한다. (queue의 원소가 Integer[3]인 이유) 2. 어떤 칸에 도달했다면, 그 칸에 도달한 것을 표시하여야 한다. 그래야 루프를 피할 수 있다. (2차원 배열 visited가 있는 이유) import java.util.*; class Solution { int mMinStepCount = 0; int mHeight = 0; int mWidth = 0; boolean DEBUG = false; void log (String s){ if (DEBUG){ System.out.println(s); } } public int solution(int[][] maps) { int answer = 0; mHeight = maps.length; mWidth = maps[0].length; mMinStepCount = (mHeight+1)*(mWidth+1

Naver Blog

프로그래머스 2개 이하로 다른 비트 - java

(야매) 주어진 수에 1, 2, 4, 8, 16... 을 더해서 (1비트씩 플립해보면서) 다른 비트가 2개 이하가 되는지 체크해본다. 알고리즘상 최적의 알고리즘은 아니다. 최적의 알고리즘은 두 경우를 생각하는 알고리즘이다. 1. 짝수 20의 자리만 플립하면 된다. 2. 홀수 20의 자리부터 왼쪽으로 탐색해가면서 가장 먼저 0이 발견되면 그 0을 1로 바꾸고 그 오른쪽 1을 0으로 바꾼다. 예) 10101101111 답) 10101110111 class Solution { public long[] solution(long[] numbers) { long[] answer = new long[numbers.length]; /** 10 2 11 3 0111 7 1000 8 1001 9 1010 10 1011 11 010101 21 010110 22 */ for (int i = 0 ; i < numbers.length ; i++) { long num = numbers[i]; String bi

Naver Blog

프로그래머스 단속카메라 - java

가장 공통으로 중복되는 일정 구간을 찾는 문제이다. 먼저, input을 진입점 위치 순서대로 오름차순 정렬한다. (진출점은 상관없다.) 공통으로 중복되는 일정 구간이 새로 발견되면 answer를 증가시킨다. import java.util.*; class Solution { public int solution(int[][] routes) { int answer = 0; //진입점 위치 순서대로 오름차순 정렬 Arrays.sort(routes, (o1, o2) -> { return o1[0] - o2[0]; }); //진입점이 가장 빠른 어떤 차의 구간을 start, end로 설정 int start = routes[0][0]; int end = routes[0][1]; answer++; for (int i = 1; i < routes.length ; i++) { //start, end 구간 사이에 어떤 차가 진입하고 진출했다면 그 구간(더 짧거나 같은 구간)으로 start, end를 리

Naver Blog

프로그래머스 2 x n 타일링 - java

패턴을 찾으면 쉬운 점화식 문제이다. n = 1 이면 한 가지 n = 2 이면 또는 두 가지 n = 3 이면 또는 또는 세 가지 n = 4 이면 또는 ? ? 여기서 남은 칸 수는 3, 여기서 남은 칸 수는 2 이다. 남은 칸 수를 채우는 방법 n=3일 경우 3, n=2일 경우 2 3 + 2 = 5 가지 n = 5 이면 또는 ? ? 여기서 남은 칸 수는 4, 여기서 남은 칸 수는 3 이다. 남은 칸 수를 채우는 방법 n=4일 경우 5, n=3일 경우 3 5 + 3 = 8가지 n = 6 이면 a6 = a5 + a4 = 8 + 5 = 13가지 n = 7 이면 a7 = a6 + a5 = 13 + 8 = 21가지 ... import java.util.*; class Solution { public int solution(int n) { int answer = 0; int[] dp = new int[60001]; dp[1] = 1; dp[2]

Naver Blog

LG CNS 코딩테스트 후기

3시간 동안 3 문제를 푼다. 1번 프로그래머스 기준 레벨 2 후반 ~ 레벨 3 2번 프로그래머스 기준 레벨 2 후반 3번 프로그래머스 기준 레벨 2 1번부터 압박이 들어와서 시간분배 실패

Naver Blog

프로그래머스 이중우선순위큐 - java

우선순위큐 두 개를 사용해본다. import java.util.*; class Solution { public int[] solution(String[] operations) { int[] answer = new int[2]; PriorityQueue<Integer> pq_max = new PriorityQueue<>(Collections.reverseOrder()); PriorityQueue<Integer> pq_min = new PriorityQueue<>(); for (String operation : operations){ String[] operationSplit = operation.split(" "); if (operationSplit[0].equals("I")){ pq_max.add(Integer.parseInt(operationSplit[1])); pq_min.add(Integer.parseInt(operationSplit[1])); } else { // operat

Naver Blog

프로그래머스 정수 삼각형 - java

다이나믹 프로그래밍이다. 삼각형의 높이가 최대 500이니 500개의 원소를 가지는 배열을 업데이트 해나간다. 그 중 최대값을 구한다. import java.math.*; import java.util.*; class Solution { public int solution(int[][] triangle) { int answer = 0; int[] summations = new int[500]; summations[0] = triangle[0][0]; //System.out.println(Arrays.toString(summations)); for (int level = 1 ; level < triangle.length ; level++) { int[] buffer = new int[triangle[level].length]; for (int i = 0 ; i < buffer.length ; i++) { buffer[i] = summations[i]; } for (int branch =

Naver Blog

프로그래머스 네트워크 - java

1. dfs로 spanning tree를 그려나가며, 들렸던 노드는 visited true로 설정한다. 2. visited가 false인 노드가 있으면 네트워크 카운트에 1을 더하고 그 노드부터 dfs로 spanning tree를 그려나간다. 마찬가지로 들렸던 노드는 visited true로 설정한다. import java.util.*; class Solution { int mNetworkCount = 0; public int solution(int n, int[][] computers) { int answer = 0; // initialized false array boolean[] visited = new boolean[computers.length]; for (int i = 0 ; i < computers.length ; i++) { // i_th computer //System.out.println(Arrays.toString(visited)); if (visited[i] =

Naver Blog

프로그래머스 최고의 집합 - java

해설을 적으려고 했는데 잘 정리된 블로그가 있어서 링크로 대체합니다. https://yejin72.tistory.com/42 [프로그래머스 Level3] 최고의 집합 - 파이썬(Python) https://school.programmers.co.kr/learn/courses/30/lessons/12938 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 자연수 n 개로 이루어진 중복 집합(multi set, 편의상 이후에는 "집합"으로 통칭) 중에 다음 두 조건을 만족하는 집합을 최고의 집합이라고 합니다. 각 원소의 합이 S가 되는 수의 집합 위 조건을 만족하면서... yejin72.tistory.com import java.math.*; import java.util.*; class Solution { public int[]

Naver Blog

Arrays.sort() Comparator? Collections?

https://ifuwanna.tistory.com/232 [Java] 배열(Array) 정렬 하기 ( 오름차순,내림차순 등 ) | Arrays.sort() java.util.Arrays 유틸리티 클래스를 사용하면 배열(Array)을 정렬, 복제하거나, List로 변환 하는 등의 작업을 쉽게 처리 할 수 있습니다. 해당 클래스의 sort() 메서드를 사용하면 쉽게 오름차순 정렬이 가능합니다. sort() 메서드는 클래스 메서드(Class method / Static method)로써 Arrays 클래스의 인스턴스 생성없이 바로 사용하시면 됩니다. 참고로 기본 정렬조건이 오름차순 인 이유는 Class 내에 기본적으로 구현되어있는 Comparable Interf... ifuwanna.tistory.com 정렬할 Class내에 구현되어 있는 Comparable 인터페이스의 compareTo() 메서드를 원하는 조건으로 오버라이드하거나 익명인터페이스 java.util.Comparator를

Naver Blog

프로그래머스 야근 지수 - java

while문 안에 알고리즘: 남은 잔업의 시간(works)을 정렬한다. works의 가장 마지막 원소가 가장 크다. 두 번째로 큰 원소의 index를 찾는다. 가장 큰 원소 - 두 번째로 큰 원소의 차이(diff)를 사용해서 야근 전 까지 남은 시간(n)으로 그것(diff)을 처리할 수 있는지 판단해본다 (while 문). 그리고 works를 업데이트한다. import java.util.*; import java.math.*; class Solution { public long solution(int n, int[] works) { long answer = 0; if (works.length == 1) { int remaining = (int)Math.max (works[0] - n, 0); return remaining * remaining; } else { // works.length > 1 while (n >= 1) { Arrays.sort(works); //System.out

Naver Blog

프로그래머스 할인 행사 - java

문제를 잘 읽자. (testcase 1) 셋째 날을 return하는 게 아니라, 가능한 날의 개수를 return하는 것이다. import java.util.*; class Solution { public int solution(String[] want, int[] number, String[] discount) { int answer = 0; // 문제를 잘 읽자. 셋째 날을 return하는 게 아니라, 가능한 날의 개수를 return하는 것이다. // HashMap으로 item 이름, 개수 pair 저장 HashMap<String, Integer> wantMap = new HashMap<>(); // itemCount는 총 필요한 want item의 개수이다. int itemCount = 0; for (int i = 0 ; i < want.length ; i++) { wantMap.put(want[i], number[i]); itemCount += number[i]; } // cu

Naver Blog

프로그래머스 [3차] n진수 게임 - java

문제를 따라가면서 구현하면 된다. class Solution { public String solution(int n, int t, int m, int p) { String result = ""; int number = 0; int cursor = 0; while (result.length() < t) { String nBasedNumber = Integer.toString(number, n).toUpperCase(); for (int i = 0 ; i < nBasedNumber.length() ; i++) { if (cursor%m == p-1) { result = result + nBasedNumber.charAt(i); if (result.length() == t) { break; } } cursor++; } number++; } //System.out.println(Integer.toString(121518, 16).toUpperCase()); return result; } }

Naver Blog

프로그래머스 주차 요금 계산 - java

구현 문제이다. import java.util.*; import java.math.*; class Solution { public int[] solution(int[] fees, String[] records) { int[] answer = {}; int limitMinute = fees[0]; int defaultFeeBeforeLimit = fees[1]; int timeUnit = fees[2]; int feeUnit = fees[3]; // HashMap으로 차량 출입 기록 HashMap<String, ParkingRecordList> recordMap = new HashMap<>(); // HashSet으로 차량 번호 기록 HashSet<String> carNumberSet = new HashSet<>(); for (String record : records) { String[] recordSplit = record.split(" "); String time = record

Naver Blog

프로그래머스 오픈채팅방 - java

HashMap을 써보자. import java.util.*; class Solution { public String[] solution(String[] record) { String[] answer = {}; HashMap<String, String> mapUidNickname = new HashMap<>(); ArrayList<String> listResult = new ArrayList<>(); for (String log : record) { StringTokenizer st = new StringTokenizer(log); String operation = st.nextToken(); String uid = st.nextToken(); if (st.hasMoreTokens()) { String nickname = st.nextToken(); mapUidNickname.put(uid, nickname); } } for (String log : record) { StringTok

Naver Blog

Character가 알파벳인지 구하기 - java

ch 는 알파벳인가? Character.isAlphabetic(ch) ch 는 대문자인가? Character.isUpperCase(ch) ch 는 소문자인가? Character.isLowerCase(ch) ch 는 문자인가? Character.isLetter(ch) ch 는 숫자인가? Character.isDigit(ch) ch 는 공백문자인가? Character.isWhitespace(ch)

Naver Blog

프로그래머스 [1차] 뉴스 클러스터링 - java

합집합과 교집합이 모두 크기가 0이라면? import java.util.*; class Solution { public int solution(String str1, String str2) { int answer = 0; //두 집합 A, B 사이의 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의된다 //다중집합 원소 사이를 비교할 때, 대문자와 소문자의 차이는 무시한다. "AB"와 "Ab", "ab"는 같은 원소로 취급한다. str1 = str1.toLowerCase(); str2 = str2.toLowerCase(); //다중집합 A = {1, 1, 2, 2, 3}, 다중집합 B = {1, 2, 2, 4, 5}라고 하면, 교집합 A ∩ B = {1, 2, 2}, 합집합 A ∪ B = {1, 1, 2, 2, 3, 4, 5}가 되므로, 자카드 유사도 J(A, B) = 3/7, 약 0.42가 된다. //System.out.println

Naver Blog

프로그래머스 귤 고르기 - java

LinkedList와 ArrayList는 add()와, set()의 time cost가 다르다. ArrayList = 해당인덱스까지 찾아가는 시간(O(1)) + 중간삽입(뒤에꺼 한칸씩 미루는데 시간걸림)(O(n)) LinkedList = 해당인덱스까지 찾아가는 시간(O(n)) + 중간삽입(앞뒤 연결끊고 사이에 넣고 연결하느라 빠름)(O(1)) 즉, 테스트 케이스에 따라 다를 수 있다. ArrayList에서 타임 아웃이 발생했다면 LinkedList로 바꾸어보고, 반대로도 해본다. 본 구현에서는 add(), set()이 빈번할 것 같아서 LinkedList로 구현하였으나, 타임 아웃이 발생했다. ArrayList로 구현하면 타임 아웃이 발생하지 않는다. import java.util.*; import java.math.*; class Solution { public int solution(int k, int[] tangerine) { int answer = 0; //귤 8개의 크기가

Naver Blog

프로그래머스 전화번호 목록 - java

import java.util.*; class Solution { public boolean solution(String[] phone_book) { boolean answer = true; //정렬하고 Arrays.sort(phone_book); //System.out.println(Arrays.toString(phone_book)); //어떤 번호가 다른 번호의 접두어인 경우 for (int i = 0; i < phone_book.length-1 ; i++){ if (phone_book[i+1].length() >= phone_book[i].length() && phone_book[i].equals(phone_book[i+1].substring(0,phone_book[i].length()))) { return false; } } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/chall

Naver Blog

프로그래머스 타겟 넘버 - java

일단 제출해보고 효율성 테스트 없으면 넘기자. import java.util.*; class Solution { public int mCount = 0; public int mTarget = 0; public int solution(int[] numbers, int target) { int answer = 0; //사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return //순서를 바꾸지 않고 적절히 더하거나 빼서 mTarget = target; mCount = 0; // 일단 정렬 //Arrays.sort(numbers); // DFS로 recursive 돌아본다 search(numbers, numbers.length-2, numbers[numbers.length-1]); search(numbers, numbers.length-2, -1 * numbers[numbers.l

Naver Blog

String 문자열과 char 배열, char 리스트 상호 변환 종합 - java

https://hianna.tistory.com/542 [Java] String 문자열을 char 배열로 변환하기 지난 번에는 char 배열을 String으로 변환하는 방법을 알아보았습니다. [Java] char 배열을 String 문자열로 변환하기 이번에는 String을 char[] 로 변환하는 방법을 알아보겠습니다. toCharArray() 코드 import java.util.Arrays; public class StringToCharArray { public static void main(String[] args) { String str = "How are you"; // 문자열 -> char 배열로 변환 char[] charArr = s... hianna.tistory.com https://www.techiedelight.com/ko/convert-string-list-characters-java/ Java에서 문자열을 문자 목록으로 변환 1 2 3 4 5 6 7 8 9 10

Naver Blog

프로그래머스 k진수에서 소수 개수 구하기 - java

소수 갯수 구하는 방법 (Math.sqrt(n) 이하까지)를 사용해본다. import java.util.*; import java.math.*; class Solution { public int solution(int n, int k) { int answer = -1; // 양의 정수 n을 k진수로 바꾼다 String kNumber = Integer.toString(n, k); System.out.println(kNumber); StringTokenizer st = new StringTokenizer (kNumber, "0"); String[] numbers = new String[st.countTokens()]; int i = 0; while (st.hasMoreTokens()) { numbers[i] = st.nextToken(); i++; } int countPrime = 0; for (String num : numbers) { //System.out.println(num);

Naver Blog

2023년 상반기 LG전자 코딩테스트, 인적성 후기, 팁

서류전형: 준비기간 2일 자소서를 제출했다. --> 내가 썼던 논문, 논문이 기여한 점, 수행했던 과제, 과제의 결과, 과제에서의 역할과 미래의 OO분야에 필요한 기술을 접목하여 썼다. 3항목 1000자, 500자, 500자로, 분량은 부담없는 수준이었다. --> 11일 후에 서류 합격발표가 있었다. 코딩테스트, 인적성 검사: 준비 기간 9일 8일 동안 코딩테스트를 준비했다. 프로그래머스에서 선택한 언어는 java이고, 1레벨 69문제를 전부 풀었다. 그 다음 2, 3레벨을 안 풀어본 다른 알고리즘 문제들로 선별해서 36문제를 풀었다. 하루 해커스 대기업 인적성 문제집 한 권을 전부 풀었다. --> 시험 당일 오전 코딩테스트는 3문제를 2시간 동안 푼다. 프로그래머스 플랫폼을 사용한다. 팁: 프로그래머스로 코딩테스트를 준비하는 것을 추천한다. 1레벨을 문제당 30분 안에 푸는 것과 2, 3레벨을 문제당 최대 70분 안에 푸는 것을 연습하면 좋다. 안전하게 1레벨은 20분 안에, 2,

Naver Blog

프로그래머스 [3차] 압축 - java

구현 문제이다. 2개의 cursor (앞 cursor, 뒤 cursor로 나누는 substring) 로 msg를 따라가본다. dict를 찾아보고 있는지, 없는지에 따라 구현하면 된다. import java.util.*; class Solution { public int[] solution(String msg) { ArrayList<Integer> answer = new ArrayList<>(); // 사전에 있는지 check // dict (or map) 을 만들어야 한다 HashMap<String, Integer> dict = new HashMap<>(); for (int i = (int)'A' ; i <= (int)'Z' ; i++) { dict.put(""+(char)i, i-(int)'A'+1); } //System.out.println(dict.get("O")); int fstCursor = 0; int sndCursor = 0; while (fstCursor < msg.l

Naver Blog

ArrayList shallow copy, deep copy - java

https://hianna.tistory.com/567 [Java] ArrayList 복사하기 (Shallow Copy, Deep Copy) ArrayList 객체를 복사하는 방법 2가지를 소개합니다. ArrayList 복사하기 - clone() - Shallow Copy ArrayList 복사하기 - Deep Copy 1. ArrayList 복사하기 - clone() - Shallow Copy public Object clone() 보통 ArrayList를 복사할 때, ArrayList의 clone() 메소드를 사용합니다. 이 메소드는 ArrayList 객체를 shallow copy한 복사본을 리턴합니다. 예제 1 - clone() 후, ArrayList의 데이터 변경... hianna.tistory.com

Naver Blog

프로그래머스 피로도 - java

dfs로 풀되, 완전탐색을 해야 한다. 대략 이렇게 탐색하는 느낌 (완전탐색) (1) / | \ (2) (3) (4) / \ / \ / \ (3) (4) (2) (4) (2) (3) | | | | | | (4) (3) (4) (2) (3) (2) (2) / | \ (1) (3) (4) / \ / \ / \ (3) (4) (1) (4) (1) (3) | | | | | | (4) (3) (4) (1) (3) (1) (3) / | \ (1) (2) (4) / \ / \ / \ (2) (4) (1) (4) (1) (2) | | | | | | (4) (2) (4) (1) (2) (1) (4) / | \ (1) (2) (3) / \ / \ / \ (2) (3) (1) (3) (1) (2) | | | | | | (3) (2) (3) (1) (2) (1) import java.util.*; class Solution { int mAnswer = 0; public int solution(int k,

Naver Blog

프로그래머스 더 맵게 - java

PriorityQueue (min heap)을 사용한다. https://blog.naver.com/lovesm135/223001654422 Priority Queue - java https://velog.io/@gillog/Java-Priority-Queue%EC%9A%B0%EC%84%A0-%EC%88%9C%EC%9C%84-%... blog.naver.com import java.util.*; class Solution { public int solution(int[] scoville, int K) { int answer = 0; // min heap PriorityQueue<Integer> priQue = new PriorityQueue<>(); for (int scov : scoville) { priQue.add(scov); } while (priQue.size() > 1 && priQue.peek() < K) { int tempScoville = priQue.poll() + (

Naver Blog

프로그래머스 H-Index - java

import java.util.*; class Solution { public int solution(int[] citations) { int answer = 0; Arrays.sort(citations); int h = 0; for (int i = citations.length-1 ; i >= 0 && h <= citations[i] ; i--) { h++; } if (h > citations[citations.length-h] ) { h--; } answer = h; return answer; } } 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 [1차] 캐시 - java

import java.util.*; class Solution { public int solution(int cacheSize, String[] cities) { int answer = 0; // DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오. // 입력된 도시이름 배열을 순서대로 처리할 때, "총 실행시간"을 출력한다. // 캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다. // cache hit일 경우 실행시간은 1이다. // cache miss일 경우 실행시간은 5이다. // LRU이면 불리면 제일 앞으로 가면 됨 // entry 교체가 빈번할 수 있으므로 LinkedList int time = 0; LinkedList<String> cache = new LinkedList<>(); for (int i = 0; i < cities.length ; i++) { String city = cities[i].toLowerCas

Naver Blog

프로그래머스 괄호 회전하기 - java

import java.util.*; class Solution { int mSLength = 0; public int solution(String s) { int answer = 0; this.mSLength = s.length(); //이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요. char[] stack = new char[s.length()+1]; for (int i = 0 ; i < s.length() ; i++) { // 회전 int stackPointer = 0; for (int j = 0 ; j < s.length() ; j++) { if (s.charAt(circular(i,j)) == '(' || s.charAt(circular(i,j)) == '{' || s.charAt(circular(i,j)) == '['){ stack[stack

Naver Blog

프로그래머스 행렬의 곱셈 - java

3중 for문으로 풀어본다. class Solution { public int[][] solution(int[][] arr1, int[][] arr2) { int[][] answer = new int[arr1.length][arr2[0].length]; for (int i = 0 ; i < arr1.length ; i++) { for (int j = 0 ; j < arr2[0].length ; j++) { answer[i][j] = 0; for (int k = 0 ; k < arr2.length ; k++) { answer[i][j] += arr1[i][k] * arr2[k][j]; } } } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 위장 - java

import java.util.*; class Solution { public int solution(String[][] clothes) { int answer = 1; // 스파이는 하루에 최소 한 개의 의상은 입습니다. // 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. // 의상의 종류는 제한없음 // 같은 이름을 가진 의상은 존재하지 않습니다. // 1 <= clothes.length <= 30 // none을 넣어도 된다. // 조합의 수 // headgear : yellow_hat, green_turban, none // eyewear : blue_sunglasses, none // none, none을 제외한 경우의 수: 3 * 2 - 1 = 5 // headgear : yellow_hat, green_turban, none // eyewear : blue_sunglasses, none // face : crow_mask, smoky_makeup, none

Naver Blog

프로그래머스 튜플 - java

구현 문제이다. import java.util.*; class Solution { public int[] solution(String s) { int[] answer = {}; // 글자 먼저 파싱해야함 // "},{" 문자열로 파싱함 // '{', '}'는 메타 캐릭터이기 때문에 이스케이프 \\ 해야함 // "{{2},{2,1},{2,1,3},{2,1,3,4}}" String[] split = s.split("\\},\\{"); // ["{{2", "2,1", "2,1,3", "2,1,3,4}}"] // 참고: StringTokenizer를 사용하면 각 문자 '{', ',', '}' 를 분리자로 인식해버린다. // new StringTokenizer(s, "\\},\\{"); // 결과 Tokens: ["2", "2", "1", "2", "1", "3", "2", "1", "3", "4"] // 배열의 가장 앞 문자열, 배열의 가장 뒷 문자열에서 '{' , '}' 문자 제거 spl

Naver Blog

프로그래머스 n^2 배열 자르기

가장 중요한 것은 패턴을 파악하는 것이다. import java.util.*; import java.math.*; class Solution { public int[] solution(int n, long left, long right) { int[] answer = new int[(int)(right-left+1)]; // 첫번째 솔루션: 문제 그대로 직관적으로 풀기 // 메모리 초과 //int[][] twoDimArr = new int[n][n]; // for (int i = 0 ; i < n ; i++) { // for (int j = 0 ; j < n ; j++) { // if (twoDimArr[i][j] == 0){ // if (j>=i) { // twoDimArr[i][j] = j+1; // } // else { // twoDimArr[i][j] = i+1; // } // } // } // //System.out.println(Arrays.toString(twoDimAr

Naver Blog

프로그래머스 기능개발 - java

import java.util.*; import java.util.stream.*; class Solution { public int[] solution(int[] progresses, int[] speeds) { int[] answer = new int[0]; //배포되는 기능 수 ArrayList<Integer> deployFunctionsCount = new ArrayList<>(); //작업메모리 ArrayList<Integer> progressesList = new ArrayList<>( Arrays.stream(progresses).boxed().collect(Collectors.toList()) ); //작업속도 ArrayList<Integer> speedList = new ArrayList<>( Arrays.stream(speeds).boxed().collect(Collectors.toList()) ); while(progressesList.size() > 0) { f

Naver Blog

프로그래머스 프린터 - java

import java.util.*; import java.util.stream.*; class Solution { public int solution(int[] priorities, int location) { int answer = 0; //1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. //2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. //3. 그렇지 않으면 J를 인쇄합니다. LinkedList<Integer> prioritiesList = new LinkedList<>( Arrays.stream(priorities).boxed().collect(Collectors.toList()) ); LinkedList<Character> alphabetList = new LinkedList<>(); for (int i = 0 ; i < priorities.length ; i++) { alpha

Naver Blog

프로그래머스 영어 끝말잇기 - java

import java.util.*; class Solution { public int[] solution(int n, String[] words) { int[] answer = new int[2]; // 3번 사람이 자신의 세 번째 차례에 말한 tank 라는 단어는 이전에 등장했던 단어이므로 탈락하게 됩니다. // 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지 int loopCount = 1; Set<String> wordsSpoken = new HashSet<>(); boolean gameIsGoOn = true; char lastChar = words[0].charAt(0); while (gameIsGoOn) { // 0 n 2n 3n... for (int i = n*(loopCount-1) ; i < n*(loopCount) && i < words.length ; i++){ if (lastChar != words[i].charAt(0) || wo

Naver Blog

프로그래머스 구명보트 - java

교훈: LinkedList sort는 굉장히 오래걸린다. 효율성이 매우 떨어진다. 필수불가결이 아니면 그냥 Array 가지고 sort하자. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 문제를 잘 읽자: ※※※제한사항※※※ import java.util.*; import java.util.stream.*; class Solution { public int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); int sumWeight = 0; //구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. //문제를 잘 읽자: ※※※제한사항※※※ int i = 0; int j = people.length-1; while(j >= i) { // heaviest human sumWeight += people[j]; if (j > i && sumWeight

Naver Blog

프로그래머스 N개의 최소공배수 - java

LCM을 구하기 위해 GCD가 필요하고, GCD를 구하기 위해 유클리드 호제법을 이용한다. 예시 72와 30의 최소공배수를 유클리드 호제법을 이용해 구하는 방법을 표로 확인해보자 SEQ GCD(A,B) A B A%B 1 GCD(72,30) 72 30 12 2 GCD(30,12) 30 12 6 3 GCD(12,6) 12 6 0 이 때 72와 32의 GCD는 6이다. import java.util.*; import java.math.*; class Solution { public int solution(int[] arr) { int answer = 1; //n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. Arrays.sort(arr); // 최대공약수 GCD(Greatest Common Divisor) // 최소공배수 LCM(Least Common Multiple) // 최소공배수 = 두 자연수의 곱 / 최대공약수 // 원소 arr[arr.len

Naver Blog

로그함수 (밑이 2인 로그 함수) - java

baseLog(수, 밑) static double baseLog(double x, double base) { return Math.log10(x) / Math.log10(base); } static double baseLog(double x, double base) { return Math.log(x) / Math.log(base); }

Naver Blog

프로그래머스 예상 대진표 - java

import java.math.*; class Solution { public int solution(int n, int a, int b) { int answer = 0; //N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. //만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. //단, A번 참가자와 B번 참가자는 서로 붙게 되기 전까지 항상 이긴다고 가정합니다. //A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 번째 라운드에서 만나는지 //A, B : N 이하인 자연수 (단, A ≠ B 입니다.) //A가 클 수도, B가 클 수도 if (b < a) { int c = a; a = b; b = c; //consequently, a < b; } // 결승전 전까지 경기 횟수: log N // ex) N = 8 , 결승전 전까지 경기 3번

Naver Blog

프로그래머스 점프와 순간 이동 - java

* 문제를 잘 읽자. * 손으로 먼저 풀어보자. import java.util.*; import java.math.*; public class Solution { public int solution(int n) { int ans = 0; //한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다 //순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다 //건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다. 아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값을 return int battery = 0; // (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동 // 백트레킹? while (n > 0) { // 남은 거리 if (n%2 == 0) { n/=

Naver Blog

프로그래머스 멀리뛰기 - java

노트에 적어가며 풀었다면, 일정 조합의 수를 더하는 방법을 찾았을 것이고 n = 1 answer = 1 n = 2 answer = 2 n = 3 answer = 3 n = 4 answer = 4c4 + 3c2 + 2c0 = 5 n = 5 answer = 5c5 + 4c3 + 3c1 = 8 n = 6 answer = 6c6 + 5c4 + 4c2 + 2c0 = 13 1 2 3 5 8 13 21 34... 피보나치 수열임을 알 수 있다. 점화식으로 푼다. (파스칼 피라미드를 그려가며 풀면 틀리더라) import java.util.*; class Solution { public long solution(int n) { long answer = 0; long[] d = new long[2001]; // 경우의 수를 나열해보면 피보나치이다. d[0] = 1; d[1] = 1; for (int i=2 ; i <= n ; i++) { d[i] = (d[i-2] + d[i-1])%1234567; }

Naver Blog

프로그래머스 겹치는 선분의 길이 - java

가장 작은 수와 가장 큰 수를 구해서 좌우로 쫙 펼치고, 그 위에 선분들을 그려넣으면서 투영시킨다. (그림자같이) 그림자가 2개 이상 겹친 구간의 길이를 구한다. 아래는 아주 유용해보인다. int[][] array Arrays.stream( array ).flatMapToInt(Arrays::stream).min().getAsInt() Arrays.stream( array ).flatMapToInt(Arrays::stream).max().getAsInt() class Solution { public int solution(int[][] lines) { int answer = 0; double min = Arrays.stream(lines).flatMapToInt(Arrays::stream).min().getAsInt() - 0.5; double max = Arrays.stream(lines).flatMapToInt(Arrays::stream).max().getAsInt() + 0.5

Naver Blog

for문에서 HashMap의 entry 사용하는 방법 - java

Map<Integer, Integer> map = new HashMap<>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { if (entry.getValue() >= 2) { answer++; } }

Naver Blog

2개의 HashMap 합치기 (putAll, merge) - java

https://hianna.tistory.com/580 [Java] 2개의 HashMap 합치기 (putAll, merge) HashMap.putAll() HashMap.merge() - Java 8 이후 1. HashMap.putAll() 이 방법을 사용하면, 같은 key가 있을 때, value를 덮어 씁니다. 예제 import java.util.HashMap; import java.util.Map; public class MergeHashMap { public static void main(String[] args) { // Map 1 준비 Map map1 = new HashMap(); map1.put("Apple", 1000); map1.put("B... hianna.tistory.com import java.util.HashMap; import java.util.Map; public class MergeHashMap { public static void main(String[

Naver Blog

2차원 배열을 1차원 배열로 flatten - java

int a [] = {1,2,6,7,2}; int b [] = {2,44,55,2}; int c [] = {2,44,511,33}; int originalArray [][] = new int[][]{a,b,c}; import java.util.*; int[] flatArray = Arrays.stream(originalArray) .flatMapToInt(Arrays::stream) .toArray(); int[] flatArray = Stream.of(a, b, c) .flatMapToInt(Arrays::stream) .toArray();

Naver Blog

Priority Queue - java

https://velog.io/@gillog/Java-Priority-Queue%EC%9A%B0%EC%84%A0-%EC%88%9C%EC%9C%84-%ED%81%90 [Java] Priority Queue(우선 순위 큐) PriorityQueue란 우선순위 큐로써 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터가 먼저 나가는 자료구조이다.PriorityQu velog.io https://crazykim2.tistory.com/575 [JAVA] Priority Queue(우선순위 큐) 개념 및 사용법 정리 안녕하세요 이번 포스팅에서는 Priority Queue에 대해서 알아보겠습니다 목차 Priority Queue(우선순위 큐)란? Priority Queue 선언하기 Priority Queue 값 추가하기 Priority Queue 값 삭제하기 Prior

Naver Blog

Stream 기본집계 sum, count, average, max, min - java

https://cornswrold.tistory.com/301 [JAVA] Stream 기본집계 sum(), count(), average(), max(), min() 집계(Aggregate) 는 최종 처리 기능이며, 요소들을 처리한 후 카운팅, 합계, 평균값, 최대값, 최소값 등과 같이 하나의 값으로 산출하는 것을 말한다. => 대량의 데이터를 가공해서 축소하는 리덕션(Reduction)이라고 볼 수 있다. 스트림에서 제공하는 기본 집계 집계 메서드에서는 리턴 값으로 OptionalXXX클래스를 리턴한다. OptionalXXX는 자바8 java.util 패키지의 Optional, OptionalDouble, OptionalI... cornswrold.tistory.com sum(), count(), average(), max(), min() 집계(Aggregate) 는 최종 처리 기능이며, 요소들을 처리한 후 카운팅, 합계, 평균값, 최대값, 최소값 등과 같이 하나의 값으로 산출하

Naver Blog

프로그래머스 다음 큰 숫자 - java

import java.util.*; import java.math.*; class Solution { public int solution(int n) { int answer = 0; // n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. // 패턴이 어렵다. // Integer에 bitCount() 메소드가 있네...;; int bits = Integer.bitCount(n); int nextN = n+1; while (bits != Integer.bitCount(nextN)) { nextN++; } answer = nextN; return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 짝지어 제거하기 - java

import java.util.*; class Solution { public int solution(String s) { int answer = -1; // 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. // 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. // stack을 쓰면 됩니다 Stack<Character> stack = new Stack<>(); for (int i = 0 ; i < s.length() ; i++) { if (!stack.isEmpty()) { if (stack.peek() == s.charAt(i)) { stack.pop(); } else { stack.push(s.charAt(i)); } } else { // stack.isEmpty() stack.push(s.charAt(i)); } }//for //문자열을 모두 제거할 수 있으므로 1을 반환합니다. if (stack.isEmpty()) { answer = 1; } else { answer =

Naver Blog

프로그래머스 신고 결과 받기 - java

HashMap과 HashSet을 사용해본다. import java.util.*; class Solution { public int[] solution(String[] id_list, String[] report, int k) { int[] answer = {}; //한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. //유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. //id_list의 원소는 이용자의 id를 나타내는 문자열이며 알파벳 소문자로만 이루어져 있습니다. //신고당한 자의 HashMap을 구현한다. //신고당한 자는 신고한 자의 ID HashSet을 갖는다. Map<String, HashSet<String>> reportedIDs = new HashMap<>(); //신고한 자의 '처리 결과 메일 수신 카운트 배열'을 만든다. int[] processMailCount = n

Naver Blog

프로그래머스 개인정보 수집 유효기간 - java

예외케이스를 잘 다루어야 하는 문제이다. import java.util.*; class Solution { public int[] solution(String today, String[] terms, String[] privacies) { int[] answer = {}; // 개인정보 n개가 있습니다. // 모든 달은 28일까지 있다고 가정합니다. // 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다. //유효기간은 개인정보를 보관할 수 있는 달 수를 나타내는 정수이며, 1 이상 100 이하입니다. Map<String, Integer> termsMap = new HashMap<>(); for (String term : terms) { String[] termAndMonths = term.split(" "); termsMap.put(termAndMonths[0], Integer.parseInt(termAndMonths[1])); } //

Naver Blog

프로그래머스 JadenCase 문자열 만들기 - java

StringTokenizer를 사용하면 매우 유용하다. (아래 첫번째 참조 블로그 참고) String split(" ")은 여러번 연속된 공백을 제대로 쪼개주지 못한다. (아래 두번째 참조 블로그 참고) public class RegularExpression { public static void main(String[] args) { String str = "1 개월"; String[] arStrNormalSpace = str.split(" "); System.out.println("단순 공백 자르기"); for (int i = 0; i < arStrNormalSpace.length; i++) { System.out.println("[" + i + "] = ^" + arStrNormalSpace[i] + "^"); } System.out.println("정규식으로 공백 한칸 자르기"); String[] arStrRegexSingleSpace = str.split("\\s"); for

Naver Blog

프로그래머스 최솟값 만들기 - java

import java.util.*; class Solution { public int solution(int []A, int []B) { int answer = 0; // greedy // 최대수 * 최소수 곱해나가면 된다. Arrays.sort(A); Arrays.sort(B); int sumA = 0; int sumB = 0; for (int i = 0 ; i < A.length ; i++) { sumA+=A[i]*B[B.length-i-1]; sumB+=A[A.length-i-1]*B[i]; } return sumA < sumB ? sumA : sumB; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 올바른 괄호 - java

stack을 사용하면 효율성 테스트 2번에서 시간초과가 난다. import java.util.*; class Solution { boolean solution(String s) { boolean answer = true; //stack Stack<Character> stack = new Stack<>(); if (s.charAt(s.length()-1) == '(') { answer = false; } else { for (int i = 0 ; i < s.length() ; i++) { if (s.charAt(i) == '(') { stack.push(s.charAt(i)); } else { //s.charAt(i) == ')' if (stack.empty()) { answer = false; break; } else { if (stack.peek() == '(') { stack.pop(); } else { stack.push(s.charAt(i)); } } }//else }//fo

Naver Blog

프로그래머스 이진 변환 반복하기 - java

StringTokenizer를 사용하면 편리합니다. import java.util.*; class Solution { public int[] solution(String s) { int[] answer = {}; String loopResult = s; int loopCount = 0; int zeros = 0; while (!loopResult.equals("1")){ StringTokenizer st = new StringTokenizer(loopResult, "0", true); loopResult = ""; while (st.hasMoreTokens()){ String token = st.nextToken(); if (token.charAt(0) == '1') { loopResult = loopResult + token; } else { //token.charAt(0) == '0' zeros+=token.length(); } }//while int length = loopRe

Naver Blog

프로그래머스 숫자의 표현 - java

class Solution { public int solution(int n) { int answer = 0; // 최대 숫자는 2로 나누고 1을 더한 것 까지만 고려하면 될 것 같다. // 어떻게 효율적으로 코딩하지? // brute force는 의미가 없다. // 20 이라고 치자 // 1, 2, 3, 4, 5, 6 까지 봤는데 21로 오버했다. // 2, 3, 4, 5, 6 은 21이다. // 3, 4, 5, 6, 7은 28이다. // 4, 5, 6, 7은 25 // 5, 6, 7은 21 // 6, 7, 8은 29 // 7, 8은 15 // 7, 8, 9는 24 // 8, 9는 17 // 8, 9, 10은 27 // 9, 10은 19 // 2로 나눈 10까지 왔는데 없다. 그러면 자기 자신 20 하나이다. // 22 라고 치자 // 1, 2, 3, 4, 5, 6, 7 까지 봤는데 28로 오버했다. // 2, 3, 4, 5, 6, 7은 27 // 3, 4, 5, 6, 7 은 25

Naver Blog

프로그래머스 피보나치 수 - java

전형적인 dynamic programming 문제이다. class Solution { public int solution(int n) { int answer = 0; // dynamic programming 문제이다. int[] array = new int[100001]; array[0] = 0; array[1] = 1; for (int i = 2 ; i <= n ; i++) { array[i] = (array[i-2] + array[i-1])%1234567; } answer = array[n]; return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 옹알이 (2) - java

class Solution { public int solution(String[] babbling) { int answer = 0; for (int i = 0 ; i < babbling.length ; i++) { // 발음 가능한지 체크 // j = 단어의 커서 System.out.println(babbling[i]); int j = 0; boolean failed = false; String lastWord = ""; while (j < babbling[i].length()) { if (j+2 < babbling[i].length() && babbling[i].substring(j,j+3).equals("aya") && !lastWord.equals("aya")) { System.out.println("aya"); lastWord = "aya"; j+=3; } else if (j+1 < babbling[i].length() && babbling[i].substring(j,j+2)

Naver Blog

프로그래머스 옹알이 (1) - java

class Solution { public int solution(String[] babbling) { int answer = 0; for (int i = 0 ; i < babbling.length ; i++) { // 발음 가능한지 체크 // j = 단어의 커서 System.out.println(babbling[i]); int j = 0; boolean failed = false; String lastWord = ""; while (j < babbling[i].length()) { if (j+2 < babbling[i].length() && babbling[i].substring(j,j+3).equals("aya") ) { System.out.println("aya"); lastWord = "aya"; j+=3; } else if (j+1 < babbling[i].length() && babbling[i].substring(j,j+2).equals("ye") ) { System.o

Naver Blog

프로그래머스 평행 - java

더블더블~~ class Solution { public int solution(int[][] dots) { int answer = 0; // 기울기 구하는 문제 // 완전탐색 // 경우의 수: 3 // dots[0][0] dots[1][0] dots[2][0] dots[3][0] // dots[0][1] dots[1][1] dots[2][1] dots[3][1] if (((double)(dots[0][0] - dots[1][0]) / (double)(dots[0][1] - dots[1][1])) == ((double)(dots[2][0] - dots[3][0]) / (double)(dots[2][1] - dots[3][1]))) { return 1; } if (((double)(dots[0][0] - dots[2][0]) / (double)(dots[0][1] - dots[2][1])) == ((double)(dots[1][0] - dots[3][0]) / (double)(dots[

Naver Blog

array에 특정 값이 포함되어 있는지 확인 - java

https://www.techiedelight.com/ko/check-array-contains-particular-value-java/ 배열에 Java의 특정 값이 포함되어 있는지 확인 1 2 3 4 5 6 7 8 9 10 11 12 import java . util . Arrays ; public class Main { public static void main ( String [ ] args ) { String [ ] values = { "B" , "A" , "C" , "D" , "E" } ; String target = "A" ; boolean found = Arrays . asList ( values ) . contains ( target ) ; System . out . println ( found ) ;... www.techiedelight.com 1. "중간 목록 사용" 에서 primitive array에서 작동하지 않는 것을 확인! import java.util.Ar

Naver Blog

java-stream-api는-왜-for-loop보다-느릴까 - java

https://sigridjin.medium.com/java-stream-api%EB%8A%94-%EC%99%9C-for-loop%EB%B3%B4%EB%8B%A4-%EB%8A%90%EB%A6%B4%EA%B9%8C-50dec4b9974b Java Stream API는 왜 for-loop보다 느릴까? The Korean Commentary on ‘The Performance Model of Streams in Java 8" by Angelika Langer sigridjin.medium.com (위 원본 링크를 꼭 정독할 것) (원본 내) 결론 오늘의 결론이다. 스트림 사용이 for-loop보다 의미가 있으려면 Collection이 되는 스트림 소스의 크기가 충분히 크거나, 컴퓨팅 연산이 CPU-intensive할 정도로 비용이 매우 비싸야 한다. 병렬 스트림을 사용하려면, 스트림 소스인 Collection은 split하기 쉬운 자료 구조이어야 하며, 웬만해서는 연산이 stateful하

Naver Blog

int array 배열 내 최소값, 최대값 stream으로 구하기 - java

https://kkh0977.tistory.com/23 18. (java/자바) 최소값(min), 최대값(max) - Arrays.stream 사용해 최소값(min), 최대값(max) 구하기 /* =========================== */ [ 개발 환경 설정 ] 개발 툴 : Eclipse 개발 언어 : Java /* =========================== */ /* =========================== */ [소스 코드] package Al; import java.util.Arrays; public class MainActivity2 { public static void main(String[] args) { // TODO Auto-generated method stub Sys... kkh0977.tistory.com //초기 배열 선언 및 데이터 생성 실시 int arr[] = {1,2,3,4,5}; /*[설 명] * 1. Arrays.strea

Naver Blog

프로그래머스 문자열 나누기 - java

독해력 문제였다. class Solution { public int solution(String s) { int answer = 0; char x = ' '; int countX = 0; int countOthers = 0; for (int i = 0 ; i < s.length() ; i++) { if (s.length() == 1) { answer++; break; }//if if (i == 0) { //먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. countOthers = 0; countX++; x = s.charAt(i); }//if else { // x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. if (s.charAt(i) == x) { countX++; }//if else { countOthers++; if (countX == countOthers) { // 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다. s = s.subst

Naver Blog

프로그래머스 성격 유형 검사하기 - java

구현 문제이다. import java.util.*; class Solution { public String solution(String[] survey, int[] choices) { String answer = ""; int[][] scoreSheet = new int[4][2]; // [[R, T], [C, F], [J, M], [A, N]] // R or T == 0; // C or F == 1; // J or M == 2; // A or N == 3; for (int i = 0 ; i < survey.length ; i++) { int factor = getFactor(survey[i].charAt(0)); char lowerHighScore = survey[i].charAt(0); char higherHighScore = survey[i].charAt(1); if ( (lowerHighScore == 'T' && higherHighScore == 'R') || (lowerH

Naver Blog

프로그래머스 햄버거 만들기 - java

구현 문제이다. import java.util.*; import java.util.stream.*; class Solution { public int solution(int[] ingredient) { int answer = 0; // 상수의 앞에 아래서부터 위로 쌓이게 되고 -> 완성된 배열의 뒤에서부터 보는 건 아니다. // 아래서부터, 빵 – 야채 – 고기 - 빵 // 빵이 쌓였을 때만 먼저 온 재료를 역으로 검색해서 빼내면 된다. // 역으로 검색 순서: 빵 - 고기 - 야채 - 빵 // 아니면 빵을 쌓는다. // (빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. ArrayList<Integer> ingredientList = new ArrayList<> ( Arrays.stream(ingredient).boxed().collect(Collectors.toList()) ); int lastBbangIndex = 0; //1, 2, 3 중 하나의 값이며, 순서대로

Naver Blog

Java에서 Integer.valueOf() 메서드를 사용하여 Int를 정수로 변환

public class SimpleTesting{ public static void main(String[] args){ int a = 10; System.out.println("a = "+a); Integer i = Integer.valueOf(a); System.out.println("i = "+i); } } a = 10 i = 10

Naver Blog

프로그래머스 기사단원의 무기 - java

약수의 개수는 제곱근 미만까지 구한 약수의 개수*2 (제곱근이 양의 정수일 때 + 1) import java.math.*; class Solution { public int solution(int number, int limit, int power) { int answer = 0; // 각 기사단원의 번호를 가지고 // 약수 갯수 확인하고 // 제한 확인하고 (제한 미만 공격력) // 더해나간다. // 기사단원 번호가 소수이면 약수의 갯수가 2개이다. // 약수의 갯수는 몇 개 일까. for (int i = 1 ; i <= number ; i++) { int hisPower = 0; for (int j = 1 ; j <= (int)Math.sqrt(i) ; j++) { if (i%j == 0) { hisPower++; } } hisPower*=2; if (Math.sqrt(i)%1 == 0) { hisPower--; } if (hisPower > limit) { hisPower =

Naver Blog

프로그래머스 키패드 누르기 - java

finger map (이동 거리)를 만들기 귀찮은 구현문제이다. import java.util.*; class Solution { public String solution(int[] numbers, String hand) { String answer = ""; // 왼쪽 엄지손가락 pointer와 오른쪽 엄지손가락 pointer를 따로 저장한다. // 왼쪽 엄지손가락은 *에서 시작, 오른쪽 엄지손가락 #에서 시작 // 상하좌우만 움직일 수 있다. // 각 엄지 손가락은 2, 5, 8, 0을 넘어가지 않는다. // distance를 미리 계산해 놓을까? // finger map을 만들어 놓을까? // * = 10, # = 10 int[][] leftFingerMap = new int[11][11]; int[][] rightFingerMap = new int[11][11]; for (int[] a : leftFingerMap) { Arrays.fill(a,10); } for (int[]

Naver Blog

프로그래머스 크레인 인형뽑기 게임 - java

stack을 사용해보자. import java.util.*; class Solution { public int solution(int[][] board, int[] moves) { int answer = 0; Stack<Integer> stack = new Stack<>(); for (int i = 0 ; i < moves.length ; i++) { int doll = 0; for (int j = 0 ; j < board.length ; j++) { if (board[j][moves[i]-1] != 0) { // 인형이 crane에 닿았다 doll = board[j][moves[i]-1]; board[j][moves[i]-1] = 0; break; } } if (doll != 0){ // 인형을 뽑았다 if (!stack.isEmpty()) { if ((stack.peek()).intValue() == doll) { stack.pop(); answer+=2; } else { sta

Naver Blog

프로그래머스 신규 아이디 추천 - java

https://velog.io/@minji/2021-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EB%B8%94%EB%9D%BC%EC%9D%B8%EB%93%9C-%EC%8B%A0%EA%B7%9C-%EC%95%84%EC%9D%B4%EB%94%94-%EC%B6%94%EC%B2%9CJava-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D 2021 카카오 블라인드 - 신규 아이디 추천(Java, 정규표현식) 앞선 포스트에서 Java에서 정규표현식과 replaceAll() 메서드를 이용해 특정 패턴의 문자열을 치환하는 방법에 대해 알아보았다. https://velog.io/@minji/Java-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D velog.io 2단계 answer = answer.replaceAll("[~!@#$%^&*()=+\\[{\\]}:?,<>/]"], ""); answer = answer.repla

Naver Blog

프로그래머스 최소직사각형 - java

import java.math.*; class Solution { public int solution(int[][] sizes) { int answer = 0; // 긴 변은 무조건 가로 // 짧은 변은 무조건 세로 // if 덮어지지 않으면 make rectangle int maxLength = 0; int itsAnotherLength = 0; for (int i = 0 ; i<sizes.length ; i++) { if (sizes[i][0] > sizes[i][1]) { if (itsAnotherLength < sizes[i][1]) { itsAnotherLength = sizes[i][1]; } if (maxLength < sizes[i][0]) { maxLength = sizes[i][0]; } } else { if (itsAnotherLength < sizes[i][0]) { itsAnotherLength = sizes[i][0]; } if (maxLength < siz

Naver Blog

프로그래머스 삼총사(최적화?) - java

단순하게 3중for문으로 돌리면 조합의 수가 많아진다. 배열을 정렬하고, 배열에서 0의 위치를 찾은 다음 (0이 없으면 0보다 바로 작은 숫자가 있는 위치) 3중for문(포인터(인덱스) 3개)을 사용한다. 포인터 i, j에 있는 숫자의 합(number[i] + number[j])(찾고자 하는 수)의 반대 부호가 0보다 크거나 같으면, max(포인터 j보다 한칸 다음 위치, 0의 위치)부터 포인터 k를 사용해 찾아나가며 합이 0이 될 때 answer를 증가시켜나간다. 가장 바깥 for문은 조건 (i < number.length-2 && number[i] <= 0)을 사용해서 세 수 모두 양의 정수인 경우는 제외한다. import java.util.*; import java.math.*; class Solution { public int solution(int[] number) { int answer = 0; // number array must be sorted. Arrays.sort

Naver Blog

프로그래머스 [1차] 비밀지도 - java

import java.math.*; class Solution { public String[] solution(int n, int[] arr1, int[] arr2) { String[] answer = new String[n]; for (int i = 0 ; i < n ; i++) { String temp = ""; for (int j = n-1 ; j >= 0 ; j--) { if (((int)(arr1[i]/Math.pow(2, j))+(int)(arr2[i]/Math.pow(2, j))) > 0) { temp = temp+"#"; } else { temp = temp+" "; } arr1[i]=(int)(arr1[i]%Math.pow(2, j)); arr2[i]=(int)(arr2[i]%Math.pow(2, j)); } answer[i] = temp; } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.c

Naver Blog

프로그래머스 문자열 내 마음대로 정렬하기 - java

Comparator 인터페이스의 compare 메서드를 구현한다. import java.util.*; class Solution { public String[] solution(String[] strings, int n) { String[] answer = Arrays.copyOf(strings, strings.length); Arrays.sort(answer, new Comparator<String>(){ @Override public int compare(String o1, String o2) { if (o1.charAt(n) == o2.charAt(n)){ for (int i = 0 ; i<o1.length() && i<o2.length() ; i++){ if (o1.charAt(i) != o2.charAt(i)){ return o1.charAt(i) - o2.charAt(i); // n 번째 인덱스 이전에 있는 알파벳 체크, 오름차순 } } for (int i = n ; i<

Naver Blog

프로그래머스 K번째수 - java

Arrays 클래스의 메서드들을 잘 쓰면 쉽다. import java.util.*; class Solution { public int[] solution(int[] array, int[][] commands) { int[] answer = new int[commands.length]; for (int i = 0 ; i < commands.length ; i++) { int[] buff = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]); Arrays.sort(buff); answer[i] = buff[commands[i][2]-1]; } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 숫자 문자열과 영단어 - java

문자열 s의 뒤에서부터 읽어오고, s에 오타는 없으니 알파벳 패턴을 보고 조건문을 구현한다. import java.util.*; class Solution { public int solution(String s) { int answer = 0; String strAnswer = ""; System.out.println((int)'0'+" "+(int)'9'); for (int i = s.length()-1 ; i >= 0 ; i--) { if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { strAnswer = s.charAt(i) + strAnswer; } else if (s.charAt(i) == 'e') { if (s.charAt(i-2) == 'o') { strAnswer = '1' + strAnswer; i -= 2; } else if (s.charAt(i-2) == 'r') { strAnswer = '3' + strAnswer; i -= 4

Naver Blog

프로그래머스 두 개 뽑아서 더하기

Set 데이터구조를 이용해본다. import java.util.*; class Solution { public int[] solution(int[] numbers) { int[] answer = {}; Set<Integer> mySet = new HashSet<>(); // 2중 for문 for (int i = 0 ; i < numbers.length-1 ; i++) { for (int j = i+1 ; j < numbers.length ; j++) { mySet.add(numbers[i]+numbers[j]); } } Integer[] buff = mySet.toArray(new Integer[0]); answer = Arrays.stream(buff).mapToInt(Integer::intValue).toArray(); Arrays.sort(answer); return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.c

Naver Blog

프로그래머스 2016년 - java

class Solution { public String solution(int a, int b) { String answer = ""; int[] dates = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int totalDates = 0; for (int i = 0 ; i < a-1 ; i++) { totalDates += dates[i]; } totalDates += b-1; System.out.println(totalDates); String[] days = {"FRI","SAT","SUN","MON","TUE","WED","THU"}; answer = days[totalDates%7]; return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 폰켓몬 - java

import java.util.*; import java.math.*; class Solution { public int solution(int[] nums) { int answer = 0; Set<Integer> mySet = new HashSet<>(); for (int i = 0 ; i < nums.length ; i++) { mySet.add(nums[i]); } answer = Math.min(nums.length/2, mySet.size()); return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 콜라 문제 - java

n을 a로 나눈 몫과 나머지를 매 스탭마다 더하면서, 몫*b를 총 마신 콜라 수(answer)에 더해 구한다. class Solution { public int solution(int a, int b, int n) { int answer = 0; int remainder = 0; int reward = 0; int bottles = n; while (true) { reward = (bottles/a) * b; System.out.print(reward+" "); if (reward == 0) { System.out.println(bottles%a); break; } answer += reward; remainder = bottles%a; System.out.print(remainder+" "); bottles = remainder + reward; System.out.println(bottles); remainder = 0; } return answer; } } 출처: 프로그래머스

Naver Blog

프로그래머스 크기가 작은 부분 문자열 - java

class Solution { public long solution(String t, String p) { //p가 겁나게 큰 수이다. long answer = 0; long standard = Long.parseLong(p); int subStringSize = p.length(); for (int i = 0 ; i+subStringSize < t.length()+1 ; i++) { String subString = t.substring(i,i+subStringSize); long buff = Long.parseLong(subString); System.out.println(buff); if (buff <= standard) { answer++; } } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 부족한 금액 계산하기 - java

class Solution { public long solution(int price, int money, int count) { long answer = -1; answer = (long)((long)money - (long)price*(long)count*((long)count+1)/2); return answer<0 ? -answer : 0; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

Naver Blog

프로그래머스 Long 비교(==, &gt;, &lt;)시 주의점 - java

Comparing Long Values in Java Last modified: May 22, 2021 by Antonio Manuel Moreno Delgado Java Get started with Spring 5 and Spring Boot 2, through the Learn Spring course: > CHECK OUT THE COURSE 1. Overview In this short tutorial, we'll discuss different ways to compare two Long instances. We emphasize the problems that arise when using the reference comparison operator (==). 2. Problem Using Reference Comparison Long is a wrapper class for the primitive type long. Since they are objects and n

1 2