본문 바로가기

반응형

Algorithm

[Algortihm/Java][프로그래머스] 오픈채팅방 [프로그래머스] 오픈채팅방 https://programmers.co.kr/learn/courses/30/lessons/42888 문제 접근 HashMap을 이용해서 유저아이디와 닉네임을 저장하고 list에 유저 아이디와 Enter or Leave를 저장한 후에 메세지를 출력할 때 유저 아이디와 닉네임을 매칭해서 메세지를 생성하였다. Code import java.util.HashMap; import java.util.ArrayList; class Solution { public String[] solution(String[] records) { String[] answer; HashMap users = new HashMap(); ArrayList messages = new ArrayList(); for(.. 더보기
[Algorithm/Java][백준] 2263 트리의 순회 [BOJ] 2263 트리의 순회 https://www.acmicpc.net/problem/2263 문제 접근 인오더와 포스트오더 순회가 주어졌을 때 프리오더 순회를 구하는 문제이다. 포스트오더에서는 트리와 서브트리의 루트를 구할 수 있고, 인오더에서는 포스트오더에서 구한 루트를 이용하여 왼쪽 서브트리와 오른쪽 서브트리를 구할 수 있다. 이를 이용해서 프리오더 순회를 구하였다. Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BOJ2263 { static int n,idx = 0; static int[] inorder, preorder, postorder; .. 더보기
[Algorithm/Java][프로그래머스] 문자열 압축 [프로그래머스] 문자열 압축 https://programmers.co.kr/learn/courses/30/lessons/60057 문제 접근 긴 문자열의 길이를 줄이기위해서 문자열을 n개 단위로 잘라서 같은 문자열 str이 n번 반복되면 nstr로 표현하여 압축하는 문제이다. compressString 함수를 만들어서 압축하려는 문자열 s와 자르려는 문자열의 길이 len을 받아서 s를 len단위로 잘라 압축한 문자열의 길이를 반환하도록 하였다. Code class Solution { public int solution(String s) { int answer = s.length(); for(int i = 1; is.length()){ cur = s.substring(i,s.length()); } else.. 더보기
[Algorithm/Java][백준] 1918 후위 표기식 [BOJ] 1918 후위 표기식 https://www.acmicpc.net/problem/1918 문제 접근 입력받은 String을 char 배열로 변환한후 하나씩 접근해서 연산자는 Stack을 이용해 처리하고 StringBuilder의 append를 이용해서 이어 붙여주었다. 중위표기식에서 후위표기식으로 변환할 때, Stack을 이용하는데 현재 연산자보다 stack에 top에 있는 연산자의 우선순위가 높다면 postfix에 추가해준다. '*'와 '/'를 2, '+' 와 '-'를 1, '('을 0으로 설정해서 위에 방식을 가능하도록 했다. 입력을 받아서 4가지 경우로 나누어서 처리를 하였다. 1.A~Z 사이에 피연산자일 경우 postfix에 추가한다. 2.'('인 경우 Stack에 push한다. 3.').. 더보기
[Algorithm/Java][백준] 1865 웜홀 [BOJ] 1865 웜홀 https://www.acmicpc.net/problem/1865 문제 접근 벨만 포드 알고리즘은 다음과 같다. 1.시작 노드를 설정한다. 2.최단 경로 테이블(배열)을 초기화한다. 3.(정점의 개수-1)번동안 모든 간선을 탐색하여 최단 경로 테이블을 갱신한다. 여기서 음의 순환이 발생하는지 알고싶다면 한번 더 모든 간선에 대해서 탐색을 하고 이때, 최단 경로 테이블이 갱신이 된다면 음의 순환이 발생한 것이다. 이 문제는 모든 노드를 시작 노드를 설정할 필요가 없이 음의 순환이 있는지 없는지만 체크하면 되기때문에 1번 노드에 대해서만 벨만 포드 알고리즘을 수행하고 이때, 음의 순환이 발생하는지 아닌지를 검사하였다. Code import java.io.BufferedReader; .. 더보기
[Algorithm/Java][프로그래머스] 타겟 넘버 [프로그래머스] 타겟 넘버 https://programmers.co.kr/learn/courses/30/lessons/43165 문제 접근 dfs를 이용해서 numbers[0] 부터 numbers[numbers.length-1]까지 모든 숫제에대해서 +,-한 경우를 탐색해서 target이 되는 경우의 수를 구했다. Code class Solution { int answer; int[] nums; public int solution(int[] numbers, int target) { answer = 0; nums = numbers; dfs(0, 0, target); return answer; } public void dfs(int num, int cnt, int target){ if(cnt == nums... 더보기
[Algorithm/Java][프로그래머스] 다음 큰 숫자 [프로그래머스] 다음 큰 숫자 https://programmers.co.kr/learn/courses/30/lessons/12911 문제 접근 처음에 접근할 때는 Integer.toBinaryString() 함수를 이용해서 string형태의 2진수로 변환한 후 1의 개수를 세고, n+1부터 1의 개수가 같을 때까지 while문을 돌렸다. 다 풀고 다른 사람의 풀이를 보니까 Integer.countBit()를 이용하면 1의 개수를 반환해주는 함수가 있어서 더 쉽게 풀었다. Code Integer.toBinaryString()이용한 풀이 class Solution { public int solution(int n) { String binaryNum = Integer.toBinaryString(n); int .. 더보기
[Algorithm/Java][백준] 1167 트리의 지름 [BOJ] 1167 트리의 지름 https://www.acmicpc.net/problem/1167 문제 접근 이 문제는 아래 문제와 거의 똑같은 문제이다. 트리를 입력해주는 방식만 다르고 알고리즘은 똑같은 문제여서 쉽게 풀 수 있었다. 1967 트리의 지름 Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class BOJ1167 { static class Node{ int to; int dist; public Node(int to, int dist) { th.. 더보기