본문 바로가기

알고리즘

(151)
[JAVA] 프로그래머스 - 카카오프렌즈 컬러링북 (DFS , BFS) 문제 내용 https://programmers.co.kr/learn/courses/30/lessons/1829?language=java 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 그림의 영역을 난이도(숫자)에 따라 나누고 나눠진 영역의 개수와 가장큰 영역안에 땅의 개수를 세는 문제다. 처음에 문제를 읽고 문제 이해가 잘되지 않았는데 난이도가 0으로 표시된 곳은 제외해야한다는 점이다. 그외에는 백준의 DFS , BFS 문제로 풀었던 문제들과 유사하다. 문제 접근 방법 먼저 DFS 방법으로 접근해서 풀었고 후..
[JAVA] 프로그래머스 - 숫자 문자열과 영단어 문제 내용 https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 문제 접근 방법 난이도가 LV1이라 그런지 쉽게 풀린 문제다. 생각한 방법은. zero~nine까지 String 배열을 만들고 HashMap에 ket엔 영단어, value엔 숫자(문자)를 각각 맞게 넣어준다. ex) (zero, 0) (one, 1) .... 작업이 완료되면 s 문자열의 문자를 앞에서부터 하나씩 검사해서 빈 문자열(resul..
[JAVA] 프로그래머스 - 오픈 채팅방 문제 내용 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 문제내용은 간단하다 채팅방을 들어오고 나가는 사람들을 기록하고 마지막에 출력하는것. 근데 닉네임 변경조건이 나갔다 다시 들어오면서 바꾸거나 채팅방안에서 바꿀수 있다고 한다. 문제 접근 방법 첫번째 방법은 오로지 배열만 이용해서 풀었는데 배열을 만들고 연산하는 과정이 다른 코드에 비해 복잡해서 그런지 런타임 에러와 시간초과가 나면서 틀리게됐다. 그래서 ..
[JAVA]프로그래머스 - 로또의 최고 순위와 최저 순위 문제 내용 https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 내가쓴 로또 번호(int[] lottos)와 1등 번호(int[] win_nums)를 비교해서 최고와 최저 순위를 구하는 방식이다. 조건은 내가쓴 로또 번호에서 0으로 표기된건 로또번호 1~45 숫자 중 중복되지 않는선에서 어느것으로든 바꿀수 있다는 조건이 있는 문제이다. 문제 접근 방법 문제는 두가지 방..
[JAVA]프로그래머스 - 문자열 압축 (KaKao) 문제내용 https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 문제 접근 방법 문자열 관련 문제를 안풀어봐서 처음에 어떻게 풀어야할지 감이 안잡혔다. 그리고 최근까지 풀었던 BFS, DFS 밖에 생각이 안나서 큐를 만들어서 큐에 비교 문자열을 넣어서 비교하려고하고,,, 재귀로도 해보려하고... 삽질을 했다. 답을 참고하여 풀어보니 큐나 재귀를 이용해서 풀수도 있겠단 생각이 들었지만 중요한건. 문자열을 나누는..
[JAVA]BOJ(백준) - 이분 그래프 - 1707 문제내용 https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 문제 접근 방법 처음에 풀때는 간선의 존재여부를 1로 표시해주는 인접행렬을 이용한 BFS방식으로 풀었다. 그결과 시간초과가 나는 풀이가 됐고, 간선을 표시해주는 방법을 찾아보니 인접행렬 대신 ArrayList 를 사용하는 방법이 있다는 것을 알았다. 간단히 예를 들면 ArrayList map = new ArrayList(); 가 있을때 map에 ArrayList를 add했다는 가정하에 v..
[JAVA]BOJ(백준) - 절댓값 힙 - 11286 문제 내용 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제 접근 방법 x가 0일때 절댓값이 가장 작은수를 출력하라는 말을듣고 우선순위큐를 사용할 생각을 할 수 있었다. 하지만 기존의 우선순위와는 다르게 큐를 만들면서 정렬을 할때 절댓값 기준으로 한번 정렬. 절댓값이 같다면 오름차순으로 정렬. 이렇게 두번 정렬이 필요하다. 그러기 위해선 우선순위큐를 만들때 Comparator로 객체를 생성해 값 o1, o2를 비교해주기..
[JAVA]BOJ(백준) - 나이트의 이동 - 7562 문제 내용 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 기존에 풀던 BFS 문제인데 단지 방향을 나타내는 배열만 바뀌었을뿐.. 문제 접근 방법 지금까지 상하좌우만 판단하던 문제에서 상하좌우가 8가지 방향(나이트 이동방향)으로 이동하면서 목표점까지 몇번 이동했는지 체크하면 되는 문제이다. 말의 이동방향을 나타내는 배열은 y축으로 +2 일때 x축으로 +1,-1 y축으로 -2 일때 x축으로 +1,-1 x축으로 +2 일때 y축으로 +1,-1 x축으로..