목록알고리즘/프로그래머스 (183)
쌓고 쌓다
https://school.programmers.co.kr/learn/courses/30/lessons/142086?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 Map을 사용한다. 문자열 s를 탐색하며 처음 나온 문자라면 Map에 해당 문자와 인덱스를 저장한다. 그리고 answer에 -1을 넣는다. 이미 존재하는 문자라면 현재 인덱스 i에서 해당 문자의 가장 최근의 위치인 m[s[i]]를 빼서 몇번째 앞에 있는지 계산한다. 그 값을 answer에 push 그리고 Map에 저장된 해당 문자의 가장 최근 위치를 갱신해준다...
https://school.programmers.co.kr/learn/courses/30/lessons/131705 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 BruteForce 방식으로 풀었다. number 길이가 최대 13이기에 가능한 모든 조합을 탐색하여 풀 수 있다. cnt로 몇개의 번호를 받은 상태인지 상태를 체크하고, sum으로 총합을 관리한다. 이때 cnt가 3이고 sum이 0이라면 삼총사를 구한것이므로 answer++ 해준다. cnt가 3인 상태에서 반복문을 돌려봐야 cnt가 4이상이 됨으로 삼총사는 구할 수 없으므로 retu..
https://school.programmers.co.kr/learn/courses/30/lessons/147355 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 t의 문자열을 하나하나 반복문으로 돌며 p와 비교할 부분 문자열을 만든다. 현재 만들어진 부분 문자열의 길이가 p보다 작다면 부분 문자열에 t의 i번째 문자열을 붙인다. 현재 만들어진 부분 문자열의 길이가 p와 동일하다면 부분 문자열이 p보다 작거나 같은지 확인하여, 만족한다면 answer++ 해준다. 그리고 현재 반복문의 i를 가지고 t의 i번째 문자를 부분 문자열에 붙인다. 부분 ..
https://school.programmers.co.kr/learn/courses/30/lessons/152996# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 Map의 Key는 몸무게, Value는 그 몸무게를 가진 사람의 수이다. weights를 돌며 2:3, 2:4, 3:4 비율이 동일한 값을 찾는다. 그 값(몸무게)을 가진 수만큼 answer에 더한다. 몸무게가 1:1로 동일한 경우가 존재하므로 이 경우도 고려한다. 1:1로 동일한 몸무게 수가 N이라면 N(N-1)/2 경우의 수를 가질 수 있다. 2자리라면 한자리는 N명중 한명, 남..
풀이 방법 철수 카드들의 최대 공약수를 구한다. 영희 카드들의 최대 공약수를 구한다. 철수의 최대 공약수로 영희의 카드들을 하나도 나눌 수 없는지 확인한다. 확인 결과를 bool A에 저장 영희의 최대 공약수로 철수 카드들을 하나도 나눌 수 없는지 확인한다. 확인 결과를 bool B에 저장 A가 true 라면, 즉. 철수의 최대 공약수로 영희의 카드들을 나눌 수 없다면 answer의 값을 철수의 최대 공약수로 갱신 B가 true 라면, 즉. 영희의 최대 공약수로 철수의 카드들을 나눌 수 없다면 영희의 최대 공약수가 answer의 값보다 크다면 answer를 영희의 최대 공약수로 갱신 풀이 코드 #include #include #include #include using namespace std; int g..
풀이 방법 그래프 탐색보단 storey를 0으로 만드는 방법을 찾으면 된다. (1) 일의 자리가 4이하라면 - 연산으로 빼버리는게 최소의 연산으로 0에 가깝게 만들 수 있고. (2) 일의 자리가 6이상이라면 + 연산으로 10을 만들어 -10 연산을 하는게 최소의 연산이 된다. EX) 6이라면 6에서 + 연산으로 10을 만들고 -10 연산을하면 5번의 연산이 필요하다. 그러나 6에서 - 연산으로 0을 만들자면 -1 연산을 6번이 필요하다. 즉 6이상이면 +연산을 해버리는게 최소의 연산이다. (3) 일의 자리가 5라면 5를 0으로 만드나, 5를 10으로 만드나 5번의 연산이 똑같이 필요한데 다음 자리 수를 보고 더 이득이 되는 방향을 잡을 수 있다. 다음 자리 수가 5~9면 일의 자리수를 올림해버리는게 연산..
https://school.programmers.co.kr/learn/courses/30/lessons/12978 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 이것은 DFS인가 BFS인가 스택을 사용한 BFS 코드?가 탄생했다. 쨋든. 순환 함수로 탐색을 구현하면 깔끔하게 문제가 풀리겠지만 스택을 고집하여 풀었다. 방문 여부 bool 배열을 사용하자니 위와 같은 한 마을로 가는 경로가 2개인 경우가 있어 섣불리 visit로 해버리면 나중에 더 저렴한 비용으로 도착했을때 마을을 통과가 가능할 수 있는데 단지 방문한적이 있다는 이유로 방문을 안해..
https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 예약 시간들이 주어졌다. 00:00시부터 24:00시까지 값을 가지는 배열이 있다고 생각하자. 현재 배열의 값은 0으로 초기화되어있다. 입실 시간부터 퇴실 시간까지 값을 1 더해준다. 다음 예약 시간의 입실 시간부터 퇴실 시간까지 값을 1 더해준다. 이렇게 더해주면 겹치는 부분은 +1씩 겹치는 만큼 값을 갖는다. 이때 배열의 값중에서 제일 큰 값이 모든 방을 관리하는데 필요한 방의 개..