본문 바로가기

알고리즘

(7)
[JAVA] 백준 추월 문제 설명 대한민국을 비롯한 대부분의 나라에서는 터널 내에서의 차선 변경을 법률로 금하고 있다. 조금만 관찰력이 있는 학생이라면 터널 내부에서는 차선이 파선이 아닌 실선으로 되어 있다는 것을 알고 있을 것이다. 이는 차선을 변경할 수 없음을 말하는 것이고, 따라서 터널 내부에서의 추월은 불가능하다. 소문난 명콤비 경찰 대근이와 영식이가 추월하는 차량을 잡기 위해 한 터널에 투입되었다. 대근이는 터널의 입구에, 영식이는 터널의 출구에 각각 잠복하고, 대근이는 차가 터널에 들어가는 순서대로, 영식이는 차가 터널에서 나오는 순서대로 각각 차량 번호를 적어 두었다. N개의 차량이 지나간 후, 대근이와 영식이는 자신들이 적어 둔 차량 번호의 목록을 보고, 터널 내부에서 반드시 추월을 했을 것으로 여겨지는 차들이 ..
[C++] Programmers 시험장 나누기 문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/81305 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 과정 첫 번째 시도 해당 문제는 최대 트래픽을 최소화하는 것이 목표이다. 따라서 해당 문제는 최적값을 찾는 최적화 문제이다. 하지만 해당 문제를 결정 문제로 치환할 수 있다. 다시 말해, "최대 트래픽의 최소값을 찾아라" 라는 문제가 아닌 "최대 트래픽으로 n이 될 수 있는가?" 라는 문제로 바꾸기로 했다. 그래서 낮은 트래픽 n부터 시작하여, "최대 트래픽으로 n이 될 수 있..
[C++] Programmers 미로 탈출 문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/81304 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 과정 첫 번째 시도 문제를 보고 트랩을 밟으면 모든 화살표의 방향이 바뀐다고 생각하였다. 그래서 road_dis[출발점][도착점][트랩의 눌림 여부] 라는 배열을 만들어서 이를 이용한 bfs 탐색 코드를 만들었다. 당연하게도 틀렸다. 문제를 다시 읽고 모든 화살표의 방향이 아니라 "트랩과 연결된" 화살표라는 것을 깨달았다. 첫 시도의 코드는 너무 멍청하다고 느껴서 바로 지웠다...
[C++] Programmers 표 편집 문제 설명 "U X": 현재 선택된 행에서 X칸 위에 있는 행을 선택합니다. "D X": 현재 선택된 행에서 X칸 아래에 있는 행을 선택합니다. "C" : 현재 선택된 행을 삭제한 후, 바로 아래 행을 선택합니다. 단, 삭제된 행이 가장 마지막 행인 경우 바로 윗 행을 선택합니다. "Z" : 가장 최근에 삭제된 행을 원래대로 복구합니다. 단, 현재 선택된 행은 바뀌지 않습니다. https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 과정 첫 ..
[C++] Programmers 거리두기 확인하기 문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 과정 해당 문제는 한 응시자를 기준으로 맨허튼 거리가 2 내에 다른 응시자가 있는 지 검사하는 문제이다. 파티션이 없다면 단순 brute force로 풀 수 있는 문제이지만, 파티션을 만듦으로써 어떻게 좀 더 효율적인 brute force로 풀 수 있을 지에 대한 사고를 요하는 문제이다. 나같은 경우, 어디로 갈 지 결정하는 dis1(맨허튼 거리가 1인 배열), dis2(맨허튼..
[C++] Programmers 숫자 문자열과 영단어 문제 설명 문제 내용 ⬇️ 더보기 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 숫자 영단어 0 zero 1 one 2 two 3 three 4 four 5 ..
알고리즘이란 슬슬 졸업하고 취업할 나이가 되어서 코테를 준비하기 위해 오랜만에 알고리즘 문제들을 풀어보았다. 그런데 PS를 좋아하는 내가 쉽게 풀 줄 알았으나 생각보다 많이 어려웠다. 그러다 고등학교 때부터 알고리즘이 뭔지 계속 물어보던 찬우(문과)가 생각났다. 늘 설명해도 비전공자 입장에서 직관적으로 설명되지 않은 것 같아서 찜찜했는데, 이 참에 알고리즘 개념에 대해 다시 한 번 정리하고 비전공자 입장에서 이해가 되도록 정리해보고자 한다. (최대한 모두가 이해할 수 있도록 하였으나 논리에 오류가 있거나 이해가 안 되는 부분이 있다면 댓글로 알려주길 바란다.) 그래서 알고리즘이 뭔데? 위키피디아에 정의된 알고리즘은 다음과 같다. - 문제 해결 방법을 정의한 일련의 단계적 절차이다. - 계산을 실행하기 위한 단계적 절..