본문 바로가기

java98

[SWEA - Java] 2814 : 최장 경로 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GOPPaAeMDFAXB SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 전체 코드 dfs를 하되, 각 정점마다 dfs를 모두 해보면서 최장 경로를 따져봐야 한다. 그렇기에 dfs후에 정점 인덱스에 해당하는 visited 값을 false로 만들어주어야 한다. (아예 dfs를 시작할 for문 안에서 visited를 초기화해주어도 된다.) 그리고 갔다 온 정점은 visited의 값이 true인데 이것 역시 재귀가 종료될 때 false로 만들어주어야지 최장 경로 구할 수.. 2020. 6. 6.
[백준 - Java] 12100번 : 2048(Easy) 문제 www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 생각할 것 최대 5번 상하좌우 어디든 그 결과 가장 큰 블록의 값 방향에 따른 이동으로 블록들이 한 방향으로 빈 블록 없이, '0' 없이 붙는다. 이때 같은 수의 블록이 만나면 합쳐진다. x 2 두배. 한 번의 이동에서 이미 합쳐진 블록은 또 합쳐질 수 없다. 똑같은 수가 세 개가 있는 경우에는 이동하려고 하는 쪽의 칸이 먼저 합쳐진다 생각할 것! 배열 복사 - 그냥 하면 안 .. 2020. 6. 5.
[백준 - Java] 13023번 : ABCDE 문제 더보기 www.acmicpc.net/problem/13023 BOJ 알고리즘 캠프에는 총 N명이 참가하고 있다. 사람들은 0번부터 N-1번으로 번호가 매겨져 있고, 일부 사람들은 친구이다. 오늘은 다음과 같은 친구 관계를 가진 사람 A, B, C, D, E가 존재하는지 구해보려고 한다. A는 B와 친구다. B는 C와 친구다. C는 D와 친구다. D는 E와 친구다. 위와 같은 친구 관계가 존재하는지 안 하는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 사람의 수 N (5 ≤ N ≤ 2000)과 친구 관계의 수 M (1 ≤ M ≤ 2000)이 주어진다. 둘째 줄부터 M개의 줄에는 정수 a와 b가 주어지며, a와 b가 친구라는 뜻이다. (0 ≤ a, b ≤ N-1, a ≠ b) 같은 친구 관계가 두 .. 2020. 5. 29.
[백준 - Java] 17265번 : 나의 인생에는 수학과 함께 문제 더보기 www.acmicpc.net/problem/17265 세현이의 인생의 목표는 1분 1초 모든 순간 수학과 함께 살아가는 것이다. 그렇기 때문에 매일 수학을 생각하면서 살아가고 있다. 세현이는 밥을 먹을 때도 쌀알의 수를 계산하여 칼로리를 바로 계산하고 한걸음 한걸음 보폭을 계산하여 자신의 활동량을 확인하며 인생의 목표를 실행하며 살아가고 있다. 그런 세현이는 매일 학교를 가면서 지나가는 길에도 수학을 적용시키고 싶었다. 세현이네 집에서 학교까지 가는 길은 N x N 크기의 바둑판과 같다. 그리고 각 블록은 1x1 정사각형으로 구분 지을 수 있다. 세현이는 그 블록마다 숫자와 연산자가 존재한다고 생각해서 임의의 숫자와 연산자를 각 블록에 넣어 바둑판을 만들었다. 세현이는 학교에서 집으로 가는 .. 2020. 5. 27.
[백준 - Java] 10972번 : 다음 순열 / 10973 : 이전 순열 문제 더보기 www.acmicpc.net/problem/10972 1부터 N까지의 수로 이루어진 순열이 있다. 이때, 사전순으로 다음에 오는 순열을 구하는 프로그램을 작성하시오. 사전 순으로 가장 앞서는 순열은 오름차순으로 이루어진 순열이고, 가장 마지막에 오는 순열은 내림차순으로 이루어진 순열이다. N = 3인 경우에 사전순으로 순열을 나열하면 다음과 같다. 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 입력 첫째 줄에 N(1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄에 순열이 주어진다. 출력 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. 단순히 생각한 나의 사고 과정과 코딩 .. 2020. 5. 27.
[Java] Collection Framework 3 - Map(HashMap / LinkedHashMap / TreeMap / HashTable/ Properties) Map 컬렉션 키(key)와 값(value)으로 구성된 Entry 객체를 저장하는 구조 키와 값은 모두 객체 키는 중복 저장될 수 없지만 값은 중복 저장될 수 있다. 만약 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치된다. Map 컬렉션에는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있다. Map 인터페이스 메소드 메소드의 매개 변수 타입과 리턴 타입에 K, V 타입 파라미터가 지정되어 있다. 왜냐하면 Map 인터페이스가 제네릭 타입이기 때문에 구체적인 타입은 구현 객체를 생성할 때 결정된다. 따라서 K, V로 주어진 것. 기능 메소드 설명 객체 추가 V put(K key, V value) 주어진 객체를.. 2020. 5. 20.
[프로그래머스 - Java] 단어 변환 (DFS/BFS Level 3) 링크 programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 설명 애초에 words에 target이 없다면 변환할 수가 없다. 그런 경우는 0을 반환하고 그 외의 경우에서 최단 과정을 찾는다. BFS를 통해 최단 과정을 찾는다. BFS를 위해 한 글자 차이나는 단어들을 인접해 있다고 생각하고 인접 리스트를 만든다. 예를들어 아래와 같은 값이 주어진다면 begin = "hit" words .. 2020. 5. 19.
[Java] 조합 Combination 조합 조합이란 n 개의 숫자 중에서 r 개의 수를 순서 없이 뽑는 경우를 말한다. (위키백과 - 수학에서 조합은 서로 다른 n개의 원소 중에서 순서에 상관없이 r개를 선택하는 것이다. 그 경우의 수는 이항 계수이다.) 예를 들어 [1, 2, 3] 배열에서의 조합은 아래와 같이 나온다. [1, 2] [1, 3] [2, 3] 참고 순열이라는 것은 주어진 수열에서 순서에 따라 결과가 달라지는 방식을 순열이라고 한다. 말 그대로, 순서가 존재하는 열이라는 것이다. 즉 순열에서 { 1, 2, 3 }과 { 1, 3, 2 } , { 2, 1, 3 } 등 모두 다른 결과를 가져온다. 순서가 다르기 때문이다. 조합은 순서가 상관이 없는 모임을 의미한다. 순서가 상관없기 때문에 { 1, 2, 3 }, { 1, 3, 2 }.. 2020. 5. 12.
[Java] 순열 Permutation 순열 순열이란 n 개의 값 중에서 r 개의 숫자를 모든 순서대로 뽑는 경우를 말한다. 수학에서 순열은 서로 다른 n개의 원소에서 r개를 뽑아한 줄로 세우는 경우의 수이다. 순열의 개수는 n의 계승 n! 와 같다. 예를 들어 [1, 2, 3] 배열에서 2개의 숫자를 뽑는 순열은 [1, 2] [1, 3] [2, 1] [2, 3] [3, 1] [3, 2] 참고 순열이라는 것은 주어진 수열에서 순서에 따라 결과가 달라지는 방식을 순열이라고 한다. 말 그대로, 순서가 존재하는 열이라는 것이다. 즉 순열에서 { 1, 2, 3 } 과 { 1, 3, 2 } , { 2, 1, 3 } 등.. 모두 다른 결과를 가져온다. 순서가 다르기 때문이다. 조합은 순서가 상관이 없는 모임을 의미한다. 순서가 상관없기 때문에 { 1, .. 2020. 5. 12.
[Java] BFS 너비 우선 탐색 - 인접리스트 / 인접행렬로 구현 BFS 너비 우선 탐색(Breadth First Search) "꼼꼼하게 좌우를 살피며 다니자"와 같이 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문하는 알고리즘이다. 시작 정점을 지나고 나면 깊이가 1인 모든 정점을 방문하고, 그다음에는 깊이가 2인 모든 정점을 방문한다. 이런 식으로 한 단계씩 깊이를 더해가며 해당 깊이에 있는 모든 정점들을 방문해 나가다가 나중에는 더 이상 방문할 곳이 없을 때 탐색을 종료한다. * 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색하는 방법 * 사용하는 경우: 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 이 방법을 선택한다. BFS의 특징 BFS는 시작 정점으로부터 거리가 가까운 정점의 순서.. 2020. 5. 9.
반응형