티스토리 뷰
멀쩡한 사각형
문제 설명
가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다.
가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하는 solution 함수를 완성해 주세요.
제한사항
- W, H : 1억 이하의 자연수
입출력 예
WHresult
8 | 12 | 80 |
입출력 예 설명
입출력 예 #1
가로가 8, 세로가 12인 직사각형을 대각선 방향으로 자르면 총 16개 정사각형을 사용할 수 없게 됩니다. 원래 직사각형에서는 96개의 정사각형을 만들 수 있었으므로, 96 - 16 = 80 을 반환합니다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "./input.txt" : "/dev/stdin"; //제 개발환경은 리눅스이기에 input.txt를 앞에 두었습니다.
// const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt'; // 실제 백준사이트에 제출할 때는 위에 filePath를 삭제하고 이 부분을 입력하면 됩니다.
let input = fs.readFileSync(filePath).toString().split(" ");
input = input.map((item) => +item);
//console.log(input);
//console.log(lottos,win_nums);
solution(input[0], input[1]);
function solution(w, h) {
let oriAnswer = w * h; // 원래의 정사각형 개수
let gcdVal = gcd(w, h); // w오 h의 최대공약수
let answer = oriAnswer - (w + h - gcdVal); // w + h - w,h의 최대공약수를 하면 선이 지나가는 정사각형의 개수를 구할 수 있습니다.
console.log(answer); // 프로그래머스에 제출시에 return answer로 고쳐야 합니다
}
function gcd(w, h) {
const mod = w % h; // 유클리드 호제법을 이용한 최대공약수 구하는 방법입니다.
if (mod === 0) {
//console.log(h);
return h; // 나머지가 0이면 h값을 반환
} else {
//console.log(h, mod);
return gcd(h, mod); // 나머지가 0이 아니면 w 가 아닌 h로 h % (w%h)를 해줍니다.
}
}
혼자서 푸는 방법을 모르겠어서 다른 사람의 방법을 공부해서 풀었습니다.
https://noogoonaa.tistory.com/74
두 분의 블로그를 참고하였습니다
'알고리즘 > 프로그래머스 문제풀이' 카테고리의 다른 글
프로그래머스 NodeJS Level 1 : 실패율 (0) | 2022.03.16 |
---|---|
프로그래머스 NodeJS Level 2 : 멀쩡한 사각형 (0) | 2022.03.03 |
프로그래머스 NodeJS Level 1 : 신고 결과 받기 (0) | 2022.03.03 |
프로그래머스 NodeJS Level 1 : 신규 아이디 추천 (0) | 2021.09.12 |
프로그래머스 NodeJS Level 1 : 로또의 최고 순위와 최저 순위 (0) | 2021.09.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 북클럽
- 프론트앤드
- 우아한테크코스
- 아차산
- WSL2
- TopLayer
- env
- React
- import/order
- 노마드코더
- javascript
- NextApiRequest
- 노개북
- jest
- 윤성우 열혈C프로그래밍
- createPortal
- nextjs
- CLASS
- electron
- 스토리 북
- error
- nodejs
- 초보
- C언어
- 원티드
- 프리온보딩
- NextRequest
- Storybook
- 위코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함