이 영역을 누르면 첫 페이지로 이동
codesche's blog 블로그의 첫 페이지로 이동

codesche's blog

페이지 맨 위로 올라가기

codesche's blog

[프로그래머스]카펫

  • 2022.12.28 19:29
  • Algorithm/프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

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

programmers.co.kr

1. 문제

2. 풀이

카펫 가운데에 있는 노란색 격자가 위치할 수 있는 전체 카펫의 크기를 구하는 문제입니다. 처음에 문제를 이해하기가 쉽지 않았는데 우선 제일 먼저 떠올랐던 건

 

1) "brown + yellow => return 배열의 배열 요소끼리 곱한 값"

2) "brown(가로) >= yellow(세로)"

 

이 두 가지 였습니다. 하지만 저 두 가지 만으로는 도저히 문제를 풀 수 있는 해결방법이 떠오르지 않아서 문제에서 주어진 테스트케이스를 엑셀로 직접 구현해봤습니다.

 

보시면 그림과 같이 가운데에 노란색 격자가 위치하려면 가로와 세로가 최소한 3 이상이어야 합니다.

문제에서 요구하는 경우의 수를 찾으려면 카펫 사이즈의 경우의 수를 구해야 하는데 이 때 첫 번째 개념이 활용됩니다. 일단 'brown 격자 수 + yellow 격자 수' 의 약수를 구합니다.

 

예를 들어 brown = 10, yellow = 2 인 경우 12의 약수를 구합니다.

12의 약수를 순서쌍으로 나타내면 총 6가지가 있습니다.

 

(1, 12)

(2, 6)

(3, 4)

(4, 3)

(6, 2)

(12, 1)

 

이 경우의 수들 중에서 정답을 찾아내야 합니다.

여기서 두 번째 개념인 'brown(가로) >= yellow(세로)' 를 활용하는데 가로의 길이가 세로보다 길거나 같아야 하므로 경우의 수가 (4, 3), (6, 2), (12, 1)로 줄어듭니다. 그리고 가운데에 노란색 격자가 자리하려면 가로, 세로 길이가 모두 3이상이어야 하기 때문에 (6, 2), (12, 1)은 정답에서 제외됩니다. 

 

그렇게 되면 남은 (4, 3)이 최종 리턴값이 되는 것입니다.

참고로 해당 카펫이 입력으로 주어진 yellow의 개수만큼 노란색 격자가 가운데에 위치할 수 있는지 확인해야 하는데 이 경우 위의 그림의 사례를 통해 공식을 세울 수 있습니다. 가로, 세로의 길이가 모두 3이상이어야 하기 때문에 

 

yellow = (가로 - 2) * (세로 - 2)

 

이렇게 공식을 세워서 노란색 격자가 가운데에 위치할 수 있는지 확인합니다.

ex) (4 - 2) * (3 - 1) = 2 => 문제에서 주어진 가로 10, 세로 2 조건에 충족함

 

*코드

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
 
 
public class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int sum = brown + yellow;
 
        for (int i = 3; i < sum; i++) {
            int j = sum / i;
 
            if (sum % i == 0 && j >= 3) {
                int col = Math.max(i, j);         // 가로
                int row = Math.min(i, j);         // 세로
                int center = (col - 2) * (row - 2);
 
                if (center == yellow) {
                    answer[0] = col;
                    answer[1] = row;
                    return answer;
                }
            }
        }
        return answer;
    }
}
 
 
Colored by Color Scripter
cs

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

[프로그래머스]모의고사  (0) 2022.12.30
[프로그래머스]-K번째수  (0) 2022.12.30
[프로그래머스]-최소 직사각형  (0) 2022.12.28
[프로그래머스]부족한 금액 계산하기  (0) 2022.12.27
[프로그래머스]2016년  (0) 2022.12.23

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [프로그래머스]모의고사

    [프로그래머스]모의고사

    2022.12.30
  • [프로그래머스]-K번째수

    [프로그래머스]-K번째수

    2022.12.30
  • [프로그래머스]-최소 직사각형

    [프로그래머스]-최소 직사각형

    2022.12.28
  • [프로그래머스]부족한 금액 계산하기

    [프로그래머스]부족한 금액 계산하기

    2022.12.27
다른 글 더 둘러보기

정보

codesche's blog 블로그의 첫 페이지로 이동

codesche's blog

  • codesche's blog의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (76)
    • Algorithm (15)
      • 백준 (3)
      • 프로그래머스 (10)
      • inflearn 알고리즘(Java) (2)
    • 블로그소개 (1)
    • Back-End (11)
      • Java (10)
      • SpringBoot (1)
    • Database (2)
      • MySQL (0)
      • MariaDB (1)
      • Redis (0)
      • 개념, 이론 (1)
    • Front-End (0)
      • html, css, javascript (0)
    • Git (2)
    • 알고리즘 지식 (11)
      • 자료구조 (11)
    • Study Cafe (21)
      • 기술면접 (6)
      • Clean Code 스터디 (14)
      • CS 스터디 (0)
      • 개발용어 (1)
    • 주간 에세이 (10)
    • DevOps (3)
      • 배포, Front&Back 연동 (1)
      • AWS (0)
      • Docker (1)
      • 이론 (1)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 주간에세이
  • git commit
  • 클린코드
  • 자바 변수
  • 개발자 현실
  • 자료구조
  • 자바 기초
  • java

나의 외부 링크

정보

The Code의 codesche's blog

codesche's blog

The Code

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © The Code. Designed by Fraccino.

티스토리툴바