lovesm135의 등록된 링크

 lovesm135로 등록된 네이버 블로그 포스트 수는 137건입니다.

프로그래머스 숫자 게임 - 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

프로그래머스 다리를 지나는 트럭 - 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

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(리스트) 형식으로 호출할 필요가 없이 리스트에서 바로 메서드를 호출할 수 있게 됐습

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은 원소들이

프로그래머스 뒤에 있는 큰 숫자 - 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 유사 문제 : 두

프로그래머스 가장 큰 수 - 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

프로그래머스 단어 변환 - 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

프로그래머스 주식가격 - 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

프로그래머스 땅따먹기 - 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 >

프로그래머스 스킬트리 - 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 ;

프로그래머스 방문 길이 - 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(

프로그래머스 등굣길 - 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:

프로그래머스 모음사전 - 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

프로그래머스 [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++) {

프로그래머스 - 게임 맵 최단거리 - 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

프로그래머스 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

프로그래머스 단속카메라 - 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를 리

프로그래머스 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]

LG CNS 코딩테스트 후기 [내부링크]

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

프로그래머스 이중우선순위큐 - 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

프로그래머스 정수 삼각형 - 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 =

프로그래머스 네트워크 - 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] =

프로그래머스 최고의 집합 - 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[]

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를

프로그래머스 야근 지수 - 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

프로그래머스 할인 행사 - 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

프로그래머스 [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; } }

프로그래머스 주차 요금 계산 - 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

프로그래머스 오픈채팅방 - 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

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)

프로그래머스 [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

프로그래머스 귤 고르기 - 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개의 크기가

프로그래머스 전화번호 목록 - 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

프로그래머스 타겟 넘버 - 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

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

프로그래머스 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);

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,

프로그래머스 [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

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

프로그래머스 피로도 - 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,

프로그래머스 더 맵게 - 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() + (

프로그래머스 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

프로그래머스 [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

프로그래머스 괄호 회전하기 - 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

프로그래머스 행렬의 곱셈 - 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

프로그래머스 위장 - 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

프로그래머스 튜플 - 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

프로그래머스 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

프로그래머스 기능개발 - 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

프로그래머스 프린터 - 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

프로그래머스 영어 끝말잇기 - 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

프로그래머스 구명보트 - 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

프로그래머스 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

로그함수 (밑이 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); }

프로그래머스 예상 대진표 - 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번

프로그래머스 점프와 순간 이동 - 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/=

프로그래머스 멀리뛰기 - 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; }

프로그래머스 겹치는 선분의 길이 - 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

for문에서 HashMap의 entry 사용하는 방법 - java [내부링크]

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

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[

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();

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

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) 는 최종 처리 기능이며, 요소들을 처리한 후 카운팅, 합계, 평균값, 최대값, 최소값 등과 같이 하나의 값으로 산출하

프로그래머스 다음 큰 숫자 - 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

프로그래머스 짝지어 제거하기 - 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 =

프로그래머스 신고 결과 받기 - 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

프로그래머스 개인정보 수집 유효기간 - 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])); } //

프로그래머스 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

프로그래머스 최솟값 만들기 - 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

프로그래머스 올바른 괄호 - 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

프로그래머스 이진 변환 반복하기 - 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

프로그래머스 숫자의 표현 - 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

프로그래머스 피보나치 수 - 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

프로그래머스 옹알이 (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)

프로그래머스 옹알이 (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

프로그래머스 평행 - 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[

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

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하

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

프로그래머스 문자열 나누기 - 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

프로그래머스 성격 유형 검사하기 - 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

프로그래머스 햄버거 만들기 - 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 중 하나의 값이며, 순서대로

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

프로그래머스 기사단원의 무기 - 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 =

프로그래머스 키패드 누르기 - 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[]

프로그래머스 크레인 인형뽑기 게임 - 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

프로그래머스 신규 아이디 추천 - 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

프로그래머스 최소직사각형 - 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

프로그래머스 삼총사(최적화?) - 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

프로그래머스 [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

프로그래머스 문자열 내 마음대로 정렬하기 - 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<

프로그래머스 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

프로그래머스 숫자 문자열과 영단어 - 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

프로그래머스 두 개 뽑아서 더하기 [내부링크]

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

프로그래머스 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

프로그래머스 폰켓몬 - 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

프로그래머스 콜라 문제 - 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; } } 출처: 프로그래머스

프로그래머스 크기가 작은 부분 문자열 - 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

프로그래머스 부족한 금액 계산하기 - 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

프로그래머스 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

프로그래머스 최대공약수와 최소공배수 - java [내부링크]

문제에 함정이 있다. 최소공배수가 int 범위를 벗어날 수 있으므로 long으로 풀어야 한다. (15번 실패 이유) import java.util.*; import java.math.*; class Solution { public long[] solution(int n, int m) { long[] answer = {0,0}; long commonFactor = 0; long commonMulti = 0; if (m > n) { int o = n; n = m; m = o; // consequently, n > m } // 이하 factors 구하기 for (long i = 1 ; i <= (long)m ; i++) { if ((long)m%i == 0 && (long)n%i == 0) { commonFactor = i; commonMulti = (long)n*(long)m/commonFactor; } } answer[0] = commonFactor; answer[1] = common

Integer(Long, Double), int(long, double), array(배열), list(리스트) 변환 종합 - java [내부링크]

Integer(Long, Double), int(long, double), array(배열), list(리스트, ArrayList) (wrapper class) Integer array를 (primitive type) int array로 변경 ↓↓ ※ 참고 Integer[] arrInteger -> int[] arrInt int[] arrInt = Arrays.stream(arrInteger).mapToInt(Integer::intValue).toArray(); (primitive type) int array를 (wrapper class) Integer array로 변경 ↓↓ ※ 참고 int[] arrInt -> Integer[] arrInteger Integer[] arrInteger = Arrays.stream(arrInt).boxed().toArray(Integer[]::new); boxed() 메서드는 primitive stream 값들을 wrapper class로 바꿔준다.

프로그래머스 같은 숫자는 싫어 - java [내부링크]

import java.util.*; public class Solution { public int[] solution(int []arr) { int[] answer = {}; ArrayList<Integer> dupRemoved = new ArrayList<>(); dupRemoved.add(arr[0]); for (int i = 0 ; i < arr.length ; i++) { if (i >= 0 && i+1 < arr.length && arr[i] != arr[i+1]) { dupRemoved.add(arr[i+1]); } } answer = dupRemoved.stream().mapToInt(Integer::intValue).toArray(); return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

프로그래머스 3진법 뒤집기 - java [내부링크]

import java.util.*; class Solution { public int solution(int n) { int answer = 0; ArrayList<Integer> list = new ArrayList<>(); int remaining = n; int count = -1; while (remaining > 0) { list.add(remaining%3); remaining/=3; count++; } System.out.println(list.toString()); for (int i = 0 ; i<list.size() ; i++){ answer+=Math.pow(3,count)*list.get(i); System.out.println(answer); count--; } return answer; } } n진수 계산하는 거 까먹으면 곤란함.(복습) list에 n으로 나눈 나머지 값을 넣으면서 list를 만들면, 0번째 자리가 n진수의 1의 자리 값. 45 = 1200(

프로그래머스 이상한 문자 만들기 - java [내부링크]

import java.util.*; class Solution { public String solution(String s) { String answer = ""; System.out.println('A'+0); System.out.println('a'+0); StringBuilder sb = new StringBuilder(); boolean isOdd = true; for (int i = 0 ; i<s.length() ; i++) { if (isOdd) { if(s.charAt(i) == ' '){ sb.append(' '); isOdd = true; } else if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') { sb.append((char)(s.charAt(i)-32)); isOdd = false; } else { sb.append(s.charAt(i)); isOdd = false; } } else { if(s.charAt(i) == ' ')

ArrayList 정렬하기 (오름차순, 내림차순, 사용자 정의) - java [내부링크]

https://hianna.tistory.com/569 [Java] ArrayList 정렬하기 (오름차순, 내림차순, 사용자 정의) Collections.sort() 오름차순으로 정렬하기 내림차순으로 정렬하기 대소문자 구분없이 정렬하기 List.sort() - Java 8 이후 오름차순으로 정렬하기 내림차순으로 정렬하기 대소문자 구분없이 정렬하기 사용자 정의 Comparable Comparator 1. Collections.sort() public static void sort(List list) public static void sort(List list, Comparator hianna.tistory.com

배열 정렬(Array Sorting) (오름차순, 내림차순) - java [내부링크]

https://codechacha.com/ko/java-sorting-array/ Java - 배열 정렬(Sorting) (오름차순, 내림차순) Arrays.sort()을 이용하면 쉽게 배열(Array)을 내림차순, 오름차순으로 정렬(sorting)할 수 있습니다. Integer, String 등 구분없이 모든 객체를 정렬할 수 있습니다. 또한, 클래스에 Comparable을 구현하면 객체 배열(Array)도 순서대로 정렬할 수 있습니다. 예제와 함께 Array를 sorting하는 방법에 대해서 알아보겠습니다. codechacha.com

String[] 배열을 List, List를 String[] 배열로 변환 [내부링크]

String[] arr -> ArrayList<String> list ArrayList<String> list = new ArrayList<String>(Arrays.asList(arr)); ArrayList<String> list -> String[] arr String[] arr = list.toArray(new String[0]);

프로그래머스 가장 먼 노드 - java [내부링크]

import java.util.*; class Solution { public static Queue<Integer> bfs = new LinkedList<>(); public static ArrayList<ArrayList<Integer>> graph = new ArrayList<>(); public int solution(int n, int[][] edge) { int answer = 0; for (int i = 0; i <= n; i++) { ArrayList<Integer> node = new ArrayList<>(); graph.add(node); } for (int i = 0; i < edge.length; i++) { graph.get(edge[i][0]).add(edge[i][1]); graph.get(edge[i][1]).add(edge[i][0]); } boolean[] visitedFlag = new boolean[n+1]; int[] distanceAndNode

프로그래머스 보석 쇼핑 - java [내부링크]

투 포인터 문제 import java.util.*; class Solution { public int[] solution(String[] gems) { int[] answer = {0, 0}; int arraySize = gems.length; int startIndex = 0; int endIndex = gems.length; int left = 0; int right = 0; int distance = Integer.MAX_VALUE; HashMap<String, Integer> checking = new HashMap<>(); HashSet<String> gemSet = new HashSet<>(); // 보석 종류 파악 for (String s: gems) { gemSet.add(s); } while (true) { // gemSet.size() == checking.size()이면 right 포인터가 오른쪽으로 이동하면서 모든 종류의 보석이 최소 1개 이상 // 확인된 것.

Arrays.sort() 두 번째 원소 기준 다음, 첫 번째 원소 기준 정렬 [내부링크]

Integer[][] public int[] solution() { int[] answer = {0, 0}; ArrayList<Integer[]> list = new ArrayList<>( Arrays.asList(new Integer[]{1,4}, new Integer[]{4, 5}, new Integer[]{3,7}, new Integer[]{2, 5}) ); Integer[][] array = list.toArray(new Integer[0][2]); print(array); System.out.println(); Arrays.sort(array, new Comparator<Integer[]>() { // o1 o2 순서로 두 원소가 parameter 로 들어옴 // compare 결과가 양수면 자리를 바꿈. @Override public int compare(Integer[] o1, Integer[] o2) { if (o1[1] == o2[1]) { // o2[0]가 o1[0

프로그래머스 무인도 여행 - java [내부링크]

import java.util.*; class Solution { int mVisited[][] = null; public int[] solution(String[] maps) { int width = maps[0].length(); int height = maps.length; mVisited = new int[height][width]; ArrayList<Integer> daysCanAliveList = new ArrayList<>(); int daysCanAliveIndex = 0; for (int cursorRow = 0; cursorRow < height; cursorRow++) { for (int cursorCol = 0; cursorCol < width; cursorCol++) { if (mVisited[cursorRow][cursorCol] == 0 && maps[cursorRow].charAt(cursorCol) != 'X') { daysCanAliveList.add

프로그래머스 문자열 내 p와 y의 개수 - java [내부링크]

class Solution { boolean solution(String s) { boolean answer = true; // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다. System.out.println("Hello Java"); int countP = 0; int countY = 0; for (int i = 0 ; i < s.length()/2 ; i++) { System.out.println("i:"+i+" char:"+s.charAt(i)); if (s.charAt(i) == 'p' || s.charAt(i) == 'P') { countP++; } else if (s.charAt(i) == 'y' || s.charAt(i) == 'Y') { countY++; } int j = (s.length()-1) - i; // 투 포인터 접근 System.out.println("j:"+j+" char:"+s.charAt(j)); if (s.charAt(j) == 'p' || s

프로그래머스 정수 내림차순으로 배치하기 - java [내부링크]

class Solution { public long solution(long n) { int[] count = new int[10]; // 0~9 숫자 카운터 long remaining = n; while (remaining > 0){ count[(int)(remaining%10)]++; // casting 주의 remaining/=10; } String s = ""; for (int i = 9 ; i >= 0 ; i--){ for (int j = 0 ; j < count[i] ; j++) { s = s+i; System.out.println(s); } } long l = Long.parseLong(s); return l; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

프로그래머스 나머지가 1이 되는 수 찾기 - java [내부링크]

import java.math.*; class Solution { public int solution(int n) { int answer = 0; for (int i = 2; i<=Math.sqrt(n) ; i++) { // 주어진 n이 소수인지 먼저 찾기 // 2부터 root값 까지만 보면 됨 if (n%i == 1) { answer = i; break; } } if (answer == 0) { return n-1; } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

프로그래머스 두 정수 사이의 합 - java [내부링크]

class Solution { // int 범위를 벗어나는 경우가 발생하므로 long으로 캐스팅 필수 public long solution(int a, int b) { long answer = 0; // swap if (a>b) { int c = a; a = b; b = c; // consequently a<b } System.out.println ("a:"+a+" b:"+b); if (a==0) { // a==0 && b>=0 answer = (long)(b*(b+1)/2); } else if (a<0) { if (b==0) { // a<0 && b==0 a = -a; answer = (long)(-a*(a+1)/2); } else if (b<0) { // a<0 && b<0 a = -a; b = -b; // consequently |a|>|b| long c = (long)(a-b); long d = (long)(b*(c+1)); long e = c*(c+1)/2; answer =

프로그래머스 콜라츠 추측 - java [내부링크]

class Solution { public int solution(int num) { int answer = 0; int maxRepeat = 500; int repeatCount = 1; if (num == 1) { return 0; } while (repeatCount <= maxRepeat) { if (num%2 == 1) { num = (num*3) + 1; } else { // Even number num/=2; if (num == 1) { answer = repeatCount; break; } } repeatCount++; } if (repeatCount > 500) { return -1; } return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

프로그래머스 나누어 떨어지는 숫자 배열 - java [내부링크]

import java.util.*; class Solution { public int[] solution(int[] arr, int divisor) { int[] answer = {}; ArrayList<Integer> list = new ArrayList<>(); for (int i = 0 ; i < arr.length ; i++) { if (arr[i]%divisor == 0) { list.add(arr[i]); } } if (list.size()==0) { return new int[] {-1}; } Integer[] buff = list.toArray(new Integer[0]); Arrays.sort(buff); answer = Arrays.stream(buff).mapToInt(Integer::intValue).toArray(); return answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/

프로그래머스 제일 작은 수 제거하기 - java [내부링크]

class Solution { public int[] solution(int[] arr) { int[] answer = new int[arr.length-1]; int min = Integer.MAX_VALUE; for (int i = 0 ; i < arr.length ; i++) { if (arr[i] < min) { min = arr[i]; } } int j = 0; for (int i = 0; i < arr.length ; i++) { if (arr[i] != min) { answer[j] = arr[i]; j+=1; } } return answer.length == 0 ? new int[] {-1} : answer; } } 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

내돈내산 포토비 포토프린터 후기 [내부링크]

포토프린터를 찾던 중, 다른 리뷰들을 찾아보았는데 포토비가 가장 낫다는 의견을 보고 포토비로 바로 결정. 사이즈는 20000mAh 보조배터리보다 살짝 큰 정도다. 무게는 휴대하고 다니기에 부담없을 정도였다. (약 15년 전 어렸을 때 최초의 가정용 canon 포토프린터의 사이즈와 비교한다면 정말 엄청난 기술발전이 있었구나 하고 생각했다.) 무엇보다 배터리를 내장하고 있기 때문에 여행 중에 간단히 출력이 가능하다는 것이 엄청난 장점이다. 풀충 후 6매를 출력해봤는데, 배터리는 문제 없었다. 스펙 상 풀충 후 30장 출력이 가능하다고 한다. 사진을 인쇄해봤다. 빠른 출력시간도 물론이거니와 화질도 굉장히 맘에 들었다. 색재현율도 훌륭하다고 생각했다. 인화지를 72매만 추가로 구매했는데, 앞으로 좋은 추억 많이 출력하고 싶어졌다. 너무 적게 산게 아닌가 싶다. 그래서 포토비 인화지는 오래오래 단종 안되었으면 좋겠다. 앨범과 포토 체인도 구매해야겠다. 추천 정도: 포토비가 내 인생 두 번째

프로그래머스 N으로 표현 - java [내부링크]

다이나믹 프로그래밍 문제 점화식 구현 문제 import java.util.*; class Solution { public int solution(int N, int number) { int ret = 0; if (N == number) { return 1; } ArrayList<HashSet<Integer>> DP = new ArrayList<>(); DP.add(0, null); for (int i = 1; i <= 8; i++) { HashSet<Integer> initSet = new HashSet<>(); DP.add(i, initSet); } for (int i = 1; i <= 8 ; i++) { // Break down the solution if (i == 1) { DP.get(1).add(N); } else if (i == 2) { DP.get(2).add(N*11); DP.get(2).add(N+N); DP.get(2).add(N-N); DP.get(2).add(N

백준 00147 동전 0 - java [내부링크]

import java.util.*; public class Main { public static void main (String args[]) { Scanner sc = new Scanner(System.in); String line = sc.nextLine(); String[] input = line.split(" "); int coinTypes = Integer.parseInt(input[0]); int totalPrice = Integer.parseInt(input[1]); ArrayList<Integer> coinType = new ArrayList<>(); for (int i = 0 ; i < coinTypes ; i++) { String coin = sc.nextLine(); coinType.add(Integer.parseInt(coin)); } int count = 0; for (int i = coinTypes-1 ; i >= 0 ; i--) { if (totalPric

백준 1931 회의실 배정 - java [내부링크]

import java.util.*; public class Main { public static int mMaxCount = 0; public static int mMeetingInfoNum = 0; public static void main (String args[]) { Scanner sc = new Scanner(System.in); mMeetingInfoNum = sc.nextInt(); int[][] time = new int[mMeetingInfoNum][2]; for (int i = 0; i < mMeetingInfoNum; i++) { time[i][0] = sc.nextInt(); time[i][1] = sc.nextInt(); } Arrays.sort(time, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if (o1[1] == o2[1]) { return o1[0] - o

백준 11399 ATM - java [내부링크]

import java.util.*; public class Main { public static int mTotalTime = 0; public static Scanner sc = new Scanner(System.in); public static void main (String args[]) { int inputNum = sc.nextInt(); int[][] input = new int[inputNum][2]; for (int i = 0; i < inputNum; i++) { input[i][0] = i; input[i][1] = sc.nextInt(); } Arrays.sort(input, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[1] - o2[1]; } }); for (int i = 0; i < inputNum; i++) { mTotalTime += input[i

백준 1541 잃어버린 괄호 - java [내부링크]

import java.util.*; public class Main { public static int mSum = 0; public static Scanner sc = new Scanner(System.in); public static void main (String args[]) { String input = sc.nextLine(); String[] nums = input.split("-|\\+"); Character[] opers = new Character[nums.length-1]; int j = 0; for(int i = 0; i < input.length(); i++) { if (input.charAt(i) - '0' < 0 || input.charAt(i) - '9' > 0) { opers[j] = input.charAt(i); j++; } } j = 0; boolean minusSwitch = false; for(int i = 0; i < nums.length; i

백준 13305 주유소 - java [내부링크]

import java.util.*; public class Main { public static long mSum = 0; public static Scanner sc = new Scanner(System.in); public static void main (String args[]) { int inputNum = sc.nextInt(); long[] distance = new long[inputNum-1]; long[] oilPrice = new long[inputNum]; long minOilPrice = Integer.MAX_VALUE; for (int i = 0; i < inputNum-1; i++) { distance[i] = sc.nextLong(); } for (int i = 0; i < inputNum; i++) { oilPrice[i] = sc.nextLong(); } for (int i = 0; i < inputNum; i++) { if (i == 0 || i ==

백준 10773 제로 - java [내부링크]

import java.util.*; public class Main { public static void main (String args[]) { Scanner sc = new Scanner(System.in); Stack<Long> stack = new Stack<>(); int K = sc.nextInt(); for (int i = 0; i < K; i++) { Long input = sc.nextLong(); if (input == 0 && !stack.isEmpty()) { stack.pop(); } else { stack.push(input); } } long sum = 0; while( 0 < stack.size()) { sum += stack.peek(); stack.pop(); } System.out.println(sum); } }

백준 9012 괄호 - java [내부링크]

import java.util.*; public class Main { public static void main (String args[]) { Scanner sc = new Scanner(System.in); Stack<Character> stack = new Stack<>(); int K = sc.nextInt(); sc.nextLine(); for (int i = 0; i < K; i++) { String input = sc.nextLine(); stack.clear(); int length = input.length(); boolean result = true; for (int j = 0; j < length; j++) { if (input.charAt(j) == ')') { if (stack.isEmpty()) { result = false; break; } else if (stack.peek() == '(') { stack.pop(); } } else if (input.

노래방에서 부르기 좋은 노래를 추천한다면? [내부링크]

Ð기타 노래방에서 부르기 좋은 노래를 추천한다면? 배고프다 2017. 4. 20. 0:22 이웃추가 본문 기타 기능 From, 블로그씨 노래방에서 부르기 좋은 노래를 추천한다면? MC the MAX one love 어디에도 그대 그대 그대 그 남잔 말야 행복하지 말아요 가슴아 그만해 그대가 분다 잠시만 안녕 박효신 야생화 눈의 꽃 숨 애상 널 사랑한다 넬 기억을 걷는 시간 지구가 태양을 네 번 Stay 한계 태연 I 11:11 Fine Rain 잊어버리지마 Why 정준일 안아줘 첫 눈 플라이 투더 스카이 너를 너를 너를 가슴 아파도

[리눅스 bash 스크립트] 다른 process의 출력 캡쳐 [내부링크]

Linux [리눅스 bash 스크립트] 다른 process의 출력 캡쳐 배고프다 2017. 4. 21. 11:12 이웃추가 본문 기타 기능 리눅스에서 bash 스크립트를 작성하다가, 다른 process가 터미널에 출력하는 것을 캡쳐하는 기능이 필요하였다. 구글링 결과 아래와 같은 글을 찾았다. In bash script, how to capture stdout line by line 그리고 구현해보았는데, 잘되었다. 아래 콜백 이해를 위한 예제 코드를 컴파일하여 활용하였다. http://blog.naver.com/lovesm135/220923839460 Java - Callback 이해를 위한 간단한 예제 코드 일반적인 경우는 Caller가 Callee의 메서드를 call하는 것. 이와 다르게, Callback이란 Caller에서 구... blog.naver.com 아래가 구현해본 쉘 스크립트이다. 매우 짧아서 이해하기 편하다. #!/bin/bash comp="hello, callb

언론 아닐까요.. [내부링크]

언론 아닐까요 삭제 후 오해라고 해명한 SBS…세월호 인양 고의 지연 보도 파문 국민일보 확인하러 가기

java 코드에서 sudo linux command 실행하기 [내부링크]

Java java 코드에서 sudo linux command 실행하기 배고프다 2017. 5. 4. 5:34 이웃추가 본문 기타 기능 String[] cmd = {"/bin/bash", "-c", "echo password | sudo -S vzctl set 101 --ipdel 10.0.10.3 --save"}; Runtime.getRuntime().exec(cmd); password에 user의 password를 적어넣으면 되고, -S 뒤에 sudo로 실행할 command를 적어넣으면 된다.

오버클럭 i7 [email protected]~4.3, ddr3@2133 [내부링크]

O.C. 오버클럭 i7 [email protected]~4.3, ddr3@2133 배고프다 2017. 5. 9. 1:05 이웃추가 본문 기타 기능 http://klevv.kr/press/677 보도자료 - Klevv 4G vs Samsung 4G 가성비 대결!!! D램의 영원한 1등? 삼성전자 DDR3 4G PC3-12800 과 ESSENCORE KLEVV DDR3 4G PC3-12800 을 간단히 테스트해 보았습니다. 삼성전자의 PC3-12800는 가장 많이 사용되는 보급형 메모리중에 하나로, 뛰어난 안정성과 호환성으로 표준 메모리로 사용된 만큼 인지도가 상당히 높으 며, 오버클럭킹에서도 좋은 모습을 보이는 제품 중에 하나입니다. ESSENCORE KLEVV ?? 생소... klevv.kr http://m.blog.naver.com/chiphell6950/100192259352 아이비브릿지 i7 3770 (논K) 오버클럭 가이드 대부분의 사람들이 아이비브릿지 오버클럭을 위해서는 K버전 CPU +

GTX1060 이엠텍 Super JETSTREAM 6G 오버클럭 fire strike 점수 [내부링크]

O.C. GTX1060 이엠텍 Super JETSTREAM 6G 오버클럭 fire strike 점수 배고프다 2017. 6. 26. 2:07 이웃추가 본문 기타 기능 이엠텍 XENON 지포스 GTX1060 Super JETSTREAM D5 6GB [다나와] 이엠텍 XENON 지포스 GTX1060 Super JETSTREAM D5 6GB 최저가 480,000원 prod.danawa.com Power +5% Core Clk +135 (+150은 그래픽카드 응답없음 발생) Mem Clk + 450 (무서워서 더 안올려봄 ㅎ) 6월 말 여름 기준 최대 온도 70도(스샷의 온도는 무시하세영) 아래는 순정 점수

Gigabyte AORUS GTX 1080 Ti ZEC 세팅 [내부링크]

O.C. Gigabyte AORUS GTX 1080 Ti ZEC 세팅 배고프다 2017. 7. 6. 23:21 이웃추가 본문 기타 기능 power 80 gpu clock 110 mem clock 300 700sol/s

키캡놀이! 하늘-핑크 [내부링크]

Hardware 키캡놀이! 하늘-핑크 배고프다 2017. 10. 17. 20:55 이웃추가 본문 기타 기능 조합: 제닉스 m10tfl, 스카이디지탈 nkey 119 한글 pbt 더블샷 키캡 핑크, 스카이디지탈 nkey 37 한글 pbt 더블샷 키캡 스카이블루

내 방에 TV가 없어서 KBS 수신료.. [내부링크]

Ð컴퓨터 내 방에 TV가 없어서 KBS 수신료.. 배고프다 2018. 7. 20. 23:28 이웃추가 본문 기타 기능 내 방에 TV가 없어서 KBS 수신료를 안내고 있는게 참 다행이란 생각이 들었다. 내 소중한 수신료로 창의력 대장님이 이런 기사를 쓰게 놔둘 수는 없다. [글로벌24 이슈] 전 세계에 드리운 ‘게임 중독’의 그늘 [앵커] 여름 방학이 다가오면서 게임에 빠져드는 자녀들 때문에 걱정하는 부모님들 많으실텐데요, 서구권도 마찬가지라고 합니다. 방에 하루종일 틀어박혀 게임만 붙들고 있는 10대들 때문에 부모들의 시름은 확인하러 가기