프로그래머스

[프로그래머스] 프로그래머스 Level1 두 개 뽑아서 더하기 Java

2022. 5. 4. 13:41
목차
  1. 문제
  2. 풀이
  3. 코드

문제

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

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

풀이

백트래킹을 통해서 문제를 해결할 수 있었다.

nCr 조합이라 가정할때 n은 numbers 배열의 인덱스 기반으로 2개를 뽑으면 돼서 numbers의 크기가 될 것이고 r은 2개를 뽑아서 더하는 것이니까 2가 될 것이다. n과 r이 무엇인지 알았으니 조합을 돌려주면 되고, 조합의 합산 결과들의 중복을 방지하기위해 각각 set에 저장해주었다. set에 저장해준 후에는 다시 배열로 옮겨주었고 정렬 후에 답을 리턴해주면 된다.

코드

import java.util.*;

// 프로그래머스
class 두 개 뽑아서 더하기 {

    public int[] arr = new int[101];
    public boolean[] isused = new boolean[101];
    public HashSet<Integer> set = new HashSet<>();

    public int[] solution(int[] numbers) {

        // combination
        func(0, 0, numbers);

        // set -> Array
        int[] answer = new int[set.size()];
        Iterator<Integer> iter = set.iterator();
        int index = 0;
        while (iter.hasNext()) {
            answer[index] = iter.next();
            index++;
        }

        Arrays.sort(answer);

        return answer;
    }

    void func(int idx, int cnt, int[] numbers) {
        if(cnt == 2) {
            int tmp = 0;
            for(int i = 0; i < 2; i++) {
                tmp += numbers[arr[i]];
            }
            set.add(tmp);
            return;
        }

        for(int i = idx; i < numbers.length; i++) {

            if(!isused[i]) {
                isused[i] = true;
                arr[cnt] = i;
                func(idx + 1, cnt + 1, numbers);
                isused[i] = false;
            }
        }
    }
}
저작자표시 비영리 동일조건 (새창열림)

'프로그래머스' 카테고리의 다른 글

[프로그래머스] 프로그래머스 Level1 신규 아이디 추천 Java (카카오 코딩테스트)  (0) 2022.05.04
[프로그래머스] 프로그래머스 Level2 방문 길이 Java  (0) 2022.05.04
[프로그래머스] 프로그래머스 Level1 약수의 개수와 덧셈 Java  (0) 2022.05.04
[프로그래머스] 프로그래머스 Level3 멀리 뛰기 C++  (0) 2022.05.03
[프로그래머스] 프로그래머스 Level3 2 x n 타일링 C++  (0) 2022.05.03
  1. 문제
  2. 풀이
  3. 코드
'프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 프로그래머스 Level1 신규 아이디 추천 Java (카카오 코딩테스트)
  • [프로그래머스] 프로그래머스 Level2 방문 길이 Java
  • [프로그래머스] 프로그래머스 Level1 약수의 개수와 덧셈 Java
  • [프로그래머스] 프로그래머스 Level3 멀리 뛰기 C++
Doshisha
Doshisha
Doshisha
Doshisha
Doshisha
전체
오늘
어제
  • 분류 전체보기
    • Java
    • Spring
    • Project
      • Gameple
      • 피파온라인 검색 사이트
    • Node.js
    • DBMS
      • MySQL
      • MSSQL
    • AWS
    • BOJ
    • 프로그래머스
    • 프로그래머스-SQL
    • 컴퓨터 구조
    • 네트워크
    • Git
    • IDE
    • 후기 및 회고
    • 기타
    • Linux
    • Frontend
      • Vue.js
      • jQuery
      • JavaScript
    • Unity
    • WAS
      • Tomcat
    • Jenkins

블로그 메뉴

  • 방명록
  • Github

공지사항

인기 글

태그

  • boj
  • 백준
  • Gameple
  • C++ BFS
  • 코테
  • 프로그래머스
  • java
  • DP
  • 구현
  • 네트워크
  • 카카오 코테
  • 게임 플랫폼 개발
  • 게임 API 연동
  • MySQL
  • SpringBoot Jenkins CI/CD
  • 게임 플랫폼
  • BFS
  • 넥슨 오픈 API
  • 카카오 코딩테스트
  • 일본
  • 문자열
  • 백트래킹
  • mysql 서브쿼리
  • SpringBoot Jenkins
  • 자바
  • 카카오
  • c++
  • 프로그래머스 SQL
  • Spring Data JPA
  • 모두의 네트워크

최근 댓글

최근 글

hELLO · Designed By 정상우.
Doshisha
[프로그래머스] 프로그래머스 Level1 두 개 뽑아서 더하기 Java
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.