본문 바로가기

Algorithm46

[프로그래머스] 코딩테스트 고득점 Kit - 해시 (JAVA) https://programmers.co.kr/learn/courses/30/lessons/42576?language=java 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr Map m = new HashMap() m.getOrDefault(p,0) : m에 p랑 매칭되는 key가 존재하면 해당 value값 반환하고 없으면 0 반환 m.get(p) : key값이 p인 value값 반환 m.keySet() : m의 key 집합 import java.util.*; class Solution {.. 2021. 9. 30.
[백준] 2671번 : 잠수함식별 (C++) https://www.acmicpc.net/problem/2671 2671번: 잠수함식별 입력에 들어있는 스트링을 읽고, 이것이 잠수함의 엔진소리를 나타내는 스트링인지 아니면 그냥 물속의 잡음인지를 판정한 후, 잠수함의 엔진 소리에 해당하는 스트링이면 "SUBMARINE"을 출력하고 www.acmicpc.net 2가지 방법을 이용하여 풀었다. 1. 문자열 처리 (이런 패턴을 찾아서 푸는걸 Finite Automata라고 부르는것 같다) 2. 정규표현식 Regex을 이용 이 문제에서는 (100~1~|01)~ 에 해당하는 패턴을 찾는 것이었다. 따라서, 모든 문자열은 100~1~ 와 01의 조합으로만 구성되어야 한다! 각각의 조합을 1번과 2번이라고 해보자. 1번 : 100~1~ 2번 : 01 맨 앞문자가 .. 2021. 9. 25.
[백준] 1647번 : 도시 분할 계획 https://www.acmicpc.net/problem/1647 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 최소비용 문제로 크루스칼 알고리즘을 사용하였다. 이 문제에서 주어진 추가적인 조건은 두개의 마을로 분할해서 최소비용을 구하는 것이었다. 따라서, 일반적인 크루스칼 알고리즘을 통해 모든 정점을 이어서 구할 수 있는 최소 비용을 구한 후 선택된 간선들 중 가장 큰 가중치값을 갖는 간선치를 빼주었다. 해당 마을을 분할해주면 되기 때문이다. 전체 코드는 다음과 같다... 2021. 9. 24.
[백준] 2003번 : 수들의 합 2 (C++) https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 연속된 숫자들의 부분합이 M이 되는 경우를 구하는 문제이다. for문으로 무작정 구현하면 시간초과가 나기 때문에, 두 포인터를 사용해서 효율성을 고려해야 하는 문제였다. (만약 주어진 숫자들이 자연수가 아니라면 두 포인터를 사용할 수 없다.) Two Pointers 는 1차원 배열에서 두 개의 포인터를 조작하여 원하는 결과를 얻는 알고리즘으로, 최악의 경우.. 2021. 9. 22.
[백준] 1920번 : 수 찾기 (C++) https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 이분 탐색으로 구현하였다. 이분 탐색 시작 전, 배열을 오름차순 정렬하는 걸 잊지말자! #include #include #include using namespace std; int N, M; int n; int arr[100000]; int solve(int n) { int start = 0; int end = N-1; while (start > N.. 2021. 9. 21.
[백준] 11005번 : 진법 변환 2 (C++, JAVA) https://www.acmicpc.net/problem/11005 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 2가지 방법으로 풀어보았다. 기억해야할 것은 정수형 숫자에 + '0' 하면 '숫자' 꼴인 char형으로 변환이 되고 정수형 숫자 + 'A'를 하면 숫자만큼 알파벳이 증가한다. 예시) 0 + 'A' = 'A' 1 + 'A' = 'B' 2 + 'A' = 'C' 5 + '0' = '5' 6 + '0' = '6' #include #include using namespace std; int N, B;.. 2021. 9. 21.