Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 글또
- 백준
- 다시보기
- 그래프이론
- 단계별문제풀이
- mrc
- 부스트캠프_AITech_3기
- 알고리즘_스터디
- Level2
- 이코테
- U_stage
- dfs
- 파이썬 3
- 정렬
- 알고리즘스터디
- 개인회고
- python3
- dp
- 백트랙킹
- ODQA
- Level2_PStage
- 부스트캠프_AITech3기
- 그리디
- 주간회고
- 기술면접
- Level1
- 프로그래머스
- 구현
- 이진탐색
- 최단경로
Archives
- Today
- Total
국문과 유목민
(Week3)[BFS] 타겟넘버 본문

주간 코딩스터디 때 푼 문제들을 정리하고 있습니다. 구체적인 문제에 대한 정보는 게시글 내 링크를 살펴봐주세요
소요시간: 15분 (풀었던 문제)
1. 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/43165
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수
programmers.co.kr
사용할 수 있는 숫자가 담긴 배열에서 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟넘버 만들기
2. 접근 방식
- 숫자에 대해 할 수 있는 것은 더하거나 빼는 두 가지 경우인데, 이를 재귀나 이렇게 풀게 되면 2의 제곱으로 커짐
- 따라서 BFS의 방법으로 문제를 풀어야 한다. (별도의 리스트를 만들어서 모든 변화 과정을 기록하기)
- 코드가 진행될 수록 2의 제곱으로 경우의 수가 생성됨.
3. 코드
def solution(numbers, target):
answers = [0]
for i in numbers:
tmp = []
for j in answers:
tmp.append(j+i)
tmp.append(j-i)
answers = tmp
return answers.count(target)
n = [1, 1, 1, 1, 1]
t = 3
출력
# answers [0]
# tmp [1, -1]
# answers [1, -1]
# tmp [2, 0, 0, -2]
# answers [2, 0, 0, -2]
# tmp [3, 1, 1, -1, 1, -1, -1, -3]
# answers [3, 1, 1, -1, 1, -1, -1, -3]
# tmp [4, 2, 2, 0, 2, 0, 0, -2, 2, 0, 0, -2, 0, -2, -2, -4]
# answers [4, 2, 2, 0, 2, 0, 0, -2, 2, 0, 0, -2, 0, -2, -2, -4]
# tmp [5, 3, 3, 1, 3, 1, 1, -1, 3, 1, 1, -1, 1, -1, -1, -3, 3, 1, 1, -1, 1, -1, -1, -3, 1, -1, -1, -3, -1, -3, -3, -5]
4. 코멘트
- 이전에 풀었던 문제였기 때문에 비교적 빠르게 아이디어를 얻어 풀 수 있었다.
- 그런데 아마 이전에 다른 해설을 보고 풀었던 것으로 기억하는데, 뭐 어쨌든 지금은 안 보고 풀 수 있으니까...
'알고리즘_코딩테스트 > 주간코딩 스터디 (주코스)' 카테고리의 다른 글
(Week4)[그리디] 큰 수 만들기 (0) | 2022.07.07 |
---|---|
(Week3)[구현] 순위검색 (0) | 2022.06.20 |
(Week2)[구현] 오픈채팅방 (0) | 2022.06.20 |
(Week2)[재귀] 하노이의 탑 (0) | 2022.06.20 |
(Week1)[N진법] n진수 게임 (0) | 2022.06.20 |