https://www.acmicpc.net/problem/1922 1922번: 네트워크 연결 이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다. www.acmicpc.net 문제풀이 보자마자 딱! MST 를 만들면 되겠구나 라고 생각했다. MST를 만드는 알고리즘은 여러가지가 있는데 그중에 kruskal 알고리즘을 사용하기로 했다. 예전에 해본적이 있어서 이걸 사용했다. union-find 알고리즘을 그대로 사용하면된다. 크루스컬 알고리즘의 핵심을 weight별로 정렬하여 cycle이 발생하지 않는 edge를 추가하는 것이다. union-find 알고리즘으로 cycle 발생 여부를 체크해가며 edge를 추가하면 쉽게 구현할 수 있다. 1. 입력받은 edge..
https://www.acmicpc.net/problem/7795 7795번: 먹을 것인가 먹힐 것인가 심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을 www.acmicpc.net 문제풀이 n과 m의 크기가 최대 20000이므로, 완전탐색을 하면 시간초과가 발생할 것이라고 생각했다. 더 좋은 방법을 생각하던중, 두 값을 정렬한 뒤 a를 순회하며 b에 이분탐색을 한 뒤 인덱스를 이용해서 더 작은 값의 개수를 구할 수 있다고 생각했다. 풀이 방법이 바로 떠올라서 풀었는데, 이분탐색에서 막혀버렸다. 맨날 공식처럼 그냥 "값이 있..
https://www.acmicpc.net/problem/1337 1337번: 올바른 배열 첫째 줄에 배열의 크기 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다. 원소는 1,000,000,000보다 작거나 같은 음이 아닌 정수이 www.acmicpc.net 문제풀이 접근 방법이 생각처럼 잘 떠오르지 않았다. 일단 연속되는 수를 찾아야 하기 때문에 정렬을 해 주어야겠다고 생각했다. 정렬한 값을 순서대로 보면서 어떻게 하면 추가해야 할 원소를 구할수 있지 않을까? 라고 고민해보았다. 그 결과 이런 방법이 떠올랐다. 정렬한 배열을 순회한다, 각 순회마다 배열 인덱스 1~4를 더한 곳의 배열 값을 가져와 현재 순회하는 배열의 값과 비교를 ..
https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제풀이 처음 문제를 딱 봤을 땐, 어 어려운데? 감이 잘 안오네 라는 생각을했다. 근데 왠지 모르게 본능적으로 스택을 써서 어떻게 하면 풀수 있을거란 생각이 났다. 문제를 많이 풀어보면서 생긴 느낌인가보다. 우선 레이저와 쇠막대기를 어떻게 구분할지 고민했는데, 이건 간단했다. 레이저는 바로 () 닫는 괄호가 나오고 쇠막대기는 그렇지 않다. 그렇다면 쇠막대기를 stack에 넣어주고, 레이저가 나온다면 두동강..
https://softeer.ai/practice/6293 Softeer - 현대자동차그룹 SW인재확보플랫폼 남북으로 흐르는 개울에 동서로 징검다리가 놓여져 있다. 이 징검다리의 돌은 들쑥날쑥하여 높이가 모두 다르다. 철수는 개울의 서쪽에서 동쪽으로 높이가 점점 높은 돌을 밟으면서 개울을 지 softeer.ai 문제풀이 DP? 계열의 문제라고 생각된다. 문제 설명이 너무 간단해서 오해가 있었다. "연속된 증가하는 돌"이 아니라 그냥 점점 높이가 높아지기만 하면, 중간 돌들은 띄어 넘을 수 있다. 반복문을 돌면서 현재까지 오면서 밟을 수 있는 최대의 돌 개수를 구하면 된다. 이건 말이 더 어렵다 코드로 한줄이다. 코드를 보자. 코테 보는 회사가 C++이 안되서 파이썬으로 하는데 진짜 간단하긴 한것같다.. ..
https://school.programmers.co.kr/learn/courses/30/lessons/68936 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 배열을 4개로 분할만 해주면 되는 문제이다. dfs 함수를 만들었는데 이 함수는, 탐색할 사각형의 행,열의 시작 인덱스, 끝인덱스+1의 값을 갖는다. 맨 처음 dfs가 호출되면 가장 처음 값을 저장한 뒤, 인자로 들어온 인덱스를 순환하며 값이 다른지 확인한다. 값이 다르다면 사각형을 4개로 분할해야 한다. 값이 모두 같다면, 해당 사각형은 하나로 합쳐진다. 그러므로 0 또는 1에 해당하는..