[프로그래머스] Lv.2 멀쩡한 사각형 (Java)

2023. 7. 27. 15:19·Algorithms(CT)/Programmers

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

 

길이가 W, 세로 길이가 H인 직사각형 종이가 있습니다.

종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1x1 크기입니다.

 

누군가 이 종이를 대각선 꼭짓점  2개를 잇는 방향으로 잘라 놓았습니다. 

그러므로 현재 직사각형 종이는 크기가 같은 직각 삼각형 2개로 나눠진 상태입니다.

이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1x1로 잘라 사용할 수 있는 만큼 사용하기로 하였습니다.

가로의 길이 W, 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구해주세요.


💡 아이디어

위의 예시 사진을 보면 잘라진 선을 직선 그래프 같다고 보았고,

x좌표가 0~W까지 직선 그래프보다 작은 y좌표까지를 , 정사각형의 개수라고 파악하고 문제를 풀었습니다.

 

📖 풀이과정

1. 우리가 구하려는 직선의 방정식을 y=ax+b라고 가정합니다.

주어진 W는 x절편, H는 y절편이기 때문에 a, b를 구해줍니다.

( * 주의해야 할 점은 기울기 a는 정수가 아니기 때문에 계산할 때 주의해야 합니다.)

x절편: y좌표가 0인 지점의 x좌표

y절편: x좌표가 0인 지점의 y좌표

 

2. x좌표를 1부터 w까지 y좌표를 구해 그보다 작은 정수(정사각형의 개수)를 answer에 더해줍니다.

기울기가 내려가는 함수이기 때문에 x=0~1인 정사각형은 x=1에서 영향을 받습니다.

3. 2번 과정에서 구한 정사각형의 개수는 직선그래프 아래에 해당하는 정사각형의 개수이므로, 

구한 개수의 2배를 해서 return 합니다.

 

크기가 같은 직각 삼각형으로 나눠졌기 때문에 한 번 더 계산할 필요 없이 2배 해주면 됩니다.


전체 코드

class Solution {
    public long solution(int w, int h) {
        long answer = 0;
        
        // y=ax+b 방정식 구하기
        double b=h;
        double a=(-h)/(double)w;
        
        //종이는 무조건 왼쪽위 에서 오른쪽 아래 끝으로 잘린다고 가정하면
        //기울기가 작아질 수 밖에 없기 때문에 x=0~1인 종이는 x=1일 때를 기준으로 생각한다.
        for(int x=1;x<=w;x++){
            answer+=(long)(a*x+b);//잘린 직각 삼각형의 왼쪽 아래 부분만 세어준다.
        }
        return answer*2;
    }
}

'Algorithms(CT) > Programmers' 카테고리의 다른 글

[프로그래머스] Lv.2 미로 탈출 (Java)  (0) 2023.08.02
[프로그래머스] Lv.2 문자열 압축 (Java)  (0) 2023.07.31
[프로그래머스] Lv.2 숫자 카드 나누기 (Java)  (0) 2023.07.27
[프로그래머스] Lv.2 거리두기 확인하기 (Java)  (0) 2023.07.26
[프로그래머스] Lv.2 점 찍기 (Java)  (0) 2023.07.21
'Algorithms(CT)/Programmers' 카테고리의 다른 글
  • [프로그래머스] Lv.2 미로 탈출 (Java)
  • [프로그래머스] Lv.2 문자열 압축 (Java)
  • [프로그래머스] Lv.2 숫자 카드 나누기 (Java)
  • [프로그래머스] Lv.2 거리두기 확인하기 (Java)
gwee_99
gwee_99
bE bETTER!
  • gwee_99
    얼렁이와 뚱땅이
    gwee_99
  • 전체
    오늘
    어제
    • ====Category====
      • Algorithms(CT)
        • Programmers
        • Baekjoon
        • Goorm
      • Web
        • Error 해결
      • BackEnd
        • Spring
        • JPA
      • FrontEnd
        • HTML.CSS
        • JavaScript
      • Language
        • Java
      • Cloud
      • CSTS
      • Books
        • IT 5분 잡학사전
      • 일상
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    BFS
    자바
    HTML
    BOJ
    Til
    제대로 파는 자바스크립트
    인프런
    java
    프로그래머스
    존안님
    백준
    LV.3
    노마드코더
    lv2
    IT 잡학사전
    스택
    Greedy
    Lv.1
    DP
    코딩테스트
    DFS
    호텔 대실
    구름톤 챌린지
    개발자북클럽
    따라하며 배우는 html css
    구름
    그리디
    lv.4
    IT 5분 잡학사전
    LV.2
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gwee_99
[프로그래머스] Lv.2 멀쩡한 사각형 (Java)
상단으로

티스토리툴바