본문 바로가기

Java

[프로그래머스] n*2 배열 자르기 문제 풀이 java 1. 문제 설명문제링크2차원 배열의 값을 집어넣고, 그것을 1차원 배열로 늘어뜨려서, 문제에서 원하는 구간 내의 숫자들을 묶어서 반환하는 문제이다.2. 접근 방식KEY WORD: Brute Force, 1차원 배열과 2차원 배열의 위치 관계해당 문제는 n의 maximum이 10^7이므로, O(n)을 초과하는 시간 복잡도를 사용하지 못한다. 따라서 2차원 배열에 값을 다 집어넣고, 그것을 1차원으로 만드는, 마치 문제에서 지시한대로는 풀이를 하지 못한다. 또한 1차원 배열을 바로 만들더라도, n*n은 배열의 메모리를 초과하는 값을 초래할 수 있기 때문에 1차원 배열 전체를 만드는 것도 무리다.따라서 우리는 정확히 left ~ right 까지의 배열을 만들어 값을 구해 반환해야 한다.(1) 1차원 배열 2.. 더보기
[프로그래머스] 행렬 테두리 회전하기 문제 풀이 java 1. 문제 설명문제 링크(1) 회전 시킬 부분 행렬의 좌상단, 우하단의 List가 주어진다.(2) List의 값마다 행렬을 시계 방향으로 회전시킨다.(3) 회전할 때, 움직였던 값 중 가장 작은 값들을 모아서 반환한다.2. 접근 방식KEY WORD: BRUTE FORCE, 배열 회전배열 회전은 브루트 포스 문제를 풀 때 단골로 나온다. 코딩 테스트에서도 배열 회전이라는 키워드가 단독으로 문제에 나오지 않지만, 문제의 조연으로는 자주 등장했던 것 같다. 그래서 회전하는 법에 대해 알아두는 것은 중요하다.문제에서, 회전하는 모습을 친절하게 예시로 알려준다.14 -> 8의 자리로, 8이 9의 자리로 시계 방향으로 움직이고 있음을 볼 수 있다.그렇다면 구현을 할 때는 어떻게 해야할까? 구현할 때는 반 시계 방향.. 더보기
99클럽 코테스터디 31일차 TIL + [프로그래머스] 네크워크 java 풀이 1. 문제 설명문제 링크서로 연결되어 있는 그래프를 하나의 군집체로 볼 때, 주어진 전체 노드에서 군집체가 총 몇 개 있는지 구하는 문제이다. 2. 접근 방식인접 리스트 형태로, 노드와 연결 정보를 저장한다. 방문 배열을 만들고 방문하지 않은 배열을 기점으로 BFS를 실행한다.한 번 BFS를 돌면, 시작 정점과 연결된 모든 정점은 방문 처리가 될 것이다. 이는 하나의 군집체를 조회한 걸로 볼 수 있다. 따라서 BFS를 돈 횟수만큼 군집체가 존재하는 것이므로, BFS를 실행한 횟수를 반환하면 된다.3. 코드 분석import java.io.*;import java.util.*;class Solution { public int solution(int n, int[][] computers) { .. 더보기
99클럽 코테 스터디 29일 TIL + [LeetCode] maximum-profit-job-scheduling 풀이설명 1. 문제 설명문제 링크(1) 일거리의 시작 시간, 끝 시간, 일을 끝냈을 때의 이익 이 주어진다.(2) 시작 시간과 끝 시간의 범위가 겹치는 일은 같이 하지 못한다. 반면 어떤 일이 끝나자마자 다른 일은 시작할 수 있다.예를 들어, job A의 끝 시간이 3시 이고 job B의 시작시간이 3시이면 두 일 거리는 연달아 할 수 있다. 반면 job C가 3~5시이고 job D가 4~6시이면 두 일은 일의 시간 범위가 겹치므로 같이하지 못한다.(3) 이때, 겹치지 않게 일을 해서, 최대 이익을 얻으려고 한다. 주어진 일거리들 중에서 가질 수 있는 최대 이익은 몇인가?2. 접근 방식KEY WORD: DP(1) 주어진 문제가 시작시간, 끝시간, 이익을 따로 따로 주기에 이를 하나의 일(job) 단위로 하나로 묶.. 더보기
99클럽 코테 스터디 28일차 + [백준] 1874 스택 수열 java 풀이 1. 문제 설명문제 링크2. 접근 방식KEY WORD: DATA STRUCTURE(0) 현재 조회 중인 수를 value, 출력해야 하는 수를 now라고 해보자.(1) value (2) stack의 top과 now를 비교한다.(3) top이 크면 어떤 방법을 써도 수열을 만들 수 없다. NO를 출력하자.(왜냐하면, 수열은 무조건 stack에서 pop되는 값으로 만들어야 하기 때문이다. stack에는 오름차순으로 값이 저장되기에, 현 stack의 top 값이 크다고 새로 push를 받으면 더 큰 값밖에 들어오지 않는다. stack의 top이 now보다 작을 때는 같은 값이 들어올 때까지 기다리면 되는 것과 상반된다.)(4) top == now 이면 stack에서 pop해서 값을 뺀다.Stack은 진짜 sta.. 더보기
[백준] 30458 팰린드롬 애너그램 java 풀이 1. 문제 설명문제 링크문자열이 주어졌을 때, 해당 문자열의 왼쪽에서부터 N/2개의 문자, 오른쪽에서부터 N/2개의 문자를 각각 군집화 한다.(만약 N/2가 소수점을 가지면 내림한다.)각 군집에서 문자를 서로 교환하였을 때, 펠린드롬 문자가 만들어지면 Yes , 어떻게 해도 안되면, No를 출력하라.펠린드롬이란?앞에서부터 읽어도, 뒤에서부터 읽어도 같은 문자열을 의미한다.ex) 기러기, radar2. 접근 방식그냥 문제에서 주어진 그대로 풀면 된다.문자열을 왼쪽에서부터 N/2 개의 문자, 오른쪽에서 부터 N/2 개의 문자로 나눈다.각 문자들의 개수를 센다.알파벳 별로 하나라도 문자가 짝수가 아니면, 아무리 바꿔도 펠린드롬이 되지 않는다. 이때는 No를 출력한다.모든 알파벳의 개수가 짝수이다. Yes를 출.. 더보기
99클럽 코테 스터디 26일차 TIL + [프로그래머스] 개인정보 수집 유효기간 풀이 1. 문제 설명문제 링크(1) 오늘이 몇년, 몇월, 며칠인지 알려주고, 개인정보의 유형별로 정보 보관 기간을 알려준다. (2) String 배열 형태로, 정보가 수집된 날짜, 개인정보의 유형이 주어질 때, 주어진 배열에서 오늘 파기될 정보가 무엇인지, 번호를 배열 형태로 반환하라. 2. 접근 방식KEY WORD: 문자열 자르기해당 문제의 입력은 다음과 같이 주어진다. todaytermsprivaciesresult"2022.05.19"["A 6", "B 12", "C 3"]["2021.05.02 A", "2021.07.01 B", "2022.02.19 C", "2022.02.20 C"][1, 3]"2020.01.01"["Z 3", "D 5"]["2019.01.01 D", "2019.11.15 Z", "2.. 더보기
Programmers 뉴스 클러스터링 java 풀이 1. 문제 설명문제 링크2. 접근 방식(1) HashSet에 나오는 모든 부분 문자열을 저장한다. (2) map1 , map2는 HashMap으로서 각 문자열의 문자가 key, 그 문자가 나오는 개수가 value이다. (3) hashSet에 저장되어 있는 문자를 하나씩 꺼낸다. 해당 문자의 개수를 map1과 map2에서 꺼내서, 합집합과 교집합을 계산한다.합집합: 둘 중 더 개수가 많은 쪽의 개수를 더한다.교집합: 둘 중 하나라도 값이 존재하지 않으면 넘어간다. 둘 다 해당 값을 가지고 있다면 개수가 더 적은 쪽의 개수를 더한다.3. 코드 분석import java.io.*;import java.util.*;class Solution { public int solution(String str1, St.. 더보기