Algorithm & Data Structure/Programmers

https://programmers.co.kr/learn/courses/30/lessons/42889#qna

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스��

programmers.co.kr

예외처리를 주의 하며 풀었던 문제입니다.

0 으로 나누는 경우,

한번도 도달하지 못한 스테이지의 경우(0/0 의 실패율)

N이 1인 경우 등의 예외를 생각해주며 풀면 쉽게 풀 수 있는 문제입니다.

분자는 반복문을 통해 단순 더하면 되고,

분모를 구하는 방법은, 총 인원을 1번째 스테이지에 넣은 뒤,

두번째 스테이지 부터 위에서 구한 이전 스테이지별 분자를 하나씩 빼주면 각 스테이지 별로 알맞은 분모(거쳐갔거나 현재 있는 사용자 수의 합)가 생깁니다.

이 후 엔 예외처리 주의하며 실패율과 인덱스별로 정렬하면 됩니다.

 

https://programmers.co.kr/learn/courses/30/lessons/12913

 

코딩테스트 연습 - 땅따먹기

땅따먹기 게임을 하려고 합니다. 땅따먹기 게임의 땅(land)은 총 N행 4열로 이루어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 1행부터 땅을 밟으며 한 행씩 내려올 때, 각 행의 4칸 중 한 칸만 밟��

programmers.co.kr

DP 문제였습니다.

temp 배열을 만들어고 0행에는 land 배열의 값을 넣고 시작합니다.

temp 배열의 1행 1열 부터 시작하여 해당 자리로 오는 최대값을 계속 갱신하면서 진행합니다.

따라서 마지막행의 4가지 열에는 마지막 행에 도달하는 각 열의 최대값이 저장되므로 이중에서 최대값을 반환 합니다.

 

https://programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

스택을 사용한 시뮬레이션 문제 였습니다.

 

moves 배열로  board의 열을 결정하고,

board에 각 행을 위에서부터 검사하면서 0이 아닌 숫자가 있으면 stack의 peek값과 비교합니다.

같으면 바구니에서 2개의 인형이 사라지고, 다르면 스택에 추가해 줍니다.

 

https://programmers.co.kr/learn/courses/30/lessons/42883#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

그리디 알고리즘 문제였습니다.

 

  • 필요한 자리수 = 주어진 수의 길이 - k
  • 필요한 자리수만큼 for문을 돌립니다.
  • 주어진 수에서 각 자리에 들어갈수 있는 자리수의 범위를 start, end 를 사용해 정해줍니다.
    • start 는 해당 자리에 올 수 있는 가장 크고 가장 왼쪽에 있는 수를 찾았을때마다 업데이트 해줍니다.
    • end는 주어진 수의 길이 - (필요한 자리수 길이 - 해당 자리수의 인덱스) 입니다.
    • ex) 만약 7자리 수, k=3 이라면 필요한 자리수는 4자리수 이고, 필요한 자리수의 첫번째 자리(0번째)에 올 수 있는 자리수의 범위는 0번째(=start) 부터 7 - (4 - 0) (=end) 까지 입니다.
  • 각 자리에 맞는 수를 찾았을때 answer에 String의  + 연산으로 추가해주는 방법은 시간초과가 발생합니다. 따라서  StringBuilder의 append 연산을 사용하고, 마지막에 toString() 해주면 시간초과에 걸리지 않습니다.

 

https://programmers.co.kr/learn/courses/30/lessons/1829

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

BFS 또는 DFS 로 영역의 넓이와 갯수를 구하는 문제였습니다.

기본적인 탐색 문제였던것 같습니다.

매 BFS마다 영역의 갯수를 증가시켜주고, 영역의 넓이를 최대값으로 업데이트 해주면 됩니다.

 

https://programmers.co.kr/learn/courses/30/lessons/42583

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

큐를 사용하는 문제였습니다.

 

  • 트럭 대기 큐와 다리를 건너는 중인 트럭 큐 두개 사용합니다.
  • 매 초 마다 다리를 건넌 트럭이 있는지 검사해 주고, 진행 큐의 경과시간을 업데이트 해줍니다.
  • 그리고 진행 큐의 무게 합(sum) 과 대기 큐의 peek의 무게를 더해서 다리가 버틸수 있는지 검사해줍니다.
  • 버틸 수 있으면 대기 큐의 peek값을 진행 큐에 넣어줍니다.

* 시간 경계를 관리하는게 까다로우므로 매초 경과시간에 따른 큐의 상황을 체크해주면서 구현합니다.

 

https://programmers.co.kr/learn/courses/30/lessons/42585

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Stack을 사용하는 문제였습니다.

 

자료형은 Stack<Integer> 를 사용합니다.

  • '('가 들어오면 0을 스택에 넣어줌
  • ')' 가 들어오면
    • 스택의 peek값이 0이면 레이져로 간주, 0을 pop한 뒤에 남은 스택의 peek값에 +1 해줌(레이져 개수 카운트 라고 생각)
    • 스택의 peek값이 0이 아니면 막대기로 간주, 스택에서 pop한 값에 +1 해주어 답에 더함, 남은 스택의 peek에 답에 더해진 pop되었던 값을 넣어줌 (레이져의 개수는 peek값에서만 기억하고 있으면 됩니다)

* 잘린 막대기의 개수는 그 막대기를 통과한 레이져의 개수 + 1 입니다.

 

https://programmers.co.kr/learn/courses/30/lessons/12900

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

간단한 동적계획법 문제였습니다.

 

n이 1,2,3,4,5... 일때 경우의 수를 생각해보면

n 1 2 3 4 5
경우의 수 1 2 3 5 8
수식 dp[n] = dp[n-2] + dp[n-1]

n이 3부터 이전 두개 항의 합으로 표현됩니다.

 

+ Recent posts