-
최대값, 최소값 - JavaScript알고리즘/Javascript 문제 2025. 4. 2. 23:39
오늘은 JS를 사용해서 최대값과 최소값을 구하는 문제를 풀어본다.
문제는 프로그래머스의 161990번 바탕화면 정리이다.
문제: 바탕화면 정리
1. 입력: 빈칸은 ".", 파일이 있는 칸은 "#"으로 표시한 배열
- wallpaper = [".#...", "..#..", "...#."]
- wallpaper[i][j]는 바탕화면에서 (i+1) 행, (j+1) 열에 해당하는 칸의 상태를 의미
2. 로직: 드래그 한 거리 | rdx - lux | + | rdy - luy|
- 가장 작은 row의 #은 lux를 결정
- 가장 작은 col의 #은 luy을 결정
- 가장 큰 row의 #은 rdx를 결정 → rdx + 1
- 가장 큰 col의 #은 rdy를 결정 → rdy + 1
- rdx와 rdy가 1이 더해짐을 아래 그림을 통해 이해해야 한다.
프로그래머스 161990번 바탕화면 정리 설명 그림 중 일부 3. 출력: 드래그의 시작점(lux, luy), 끝점 (rdx, rdy)의 정보를 가진 정수 배열 [ lux, luy, rdx, rdy ]
제출한 답안
wallpaper 값을 받아서 lux, luy, rdx, rdy를 뽑아낸 뒤 배열에 넣어 반환해주면 되겠다.
최대값, 최소값을 구하는 방식으로 구현한다.
- 가장 작은 값들에는 역설적으로 가장 큰 값을 넣어, 자신보다 작은 값으로 계속 업데이트를 수행
- 반대로 가장 큰 값들에는 가장 작은 값을 넣고 자신보다 큰 값으로 계속 업데이트를 수행
문자열을 스프레드 연산자를 활용하면 Array.from('문자열')과 동일한 결과를 가진다.
function solution(wallpaper) { let [minX, minY, maxX, maxY] = [Infinity, Infinity, -Infinity, -Infinity]; wallpaper.forEach((cols, row) => { [...cols].forEach((char, col) => { if (char === '#') { minX = minX > row ? row : minX; minY = minY > col ? col : minY; maxX = maxX < row ? row : maxX; maxY = maxY < col ? col : maxY; } }); }); return [minX, minY, maxX + 1, maxY + 1]; } // console.log(solution(['.#...', '..#..', '...#.'])); // console.log(solution(['..........', '.....#....', '......##..', '...##.....', '....#.....'])); // console.log(solution(['.##...##.', '#..#.#..#', '#...#...#', '.#.....#.', '..#...#..', '...#.#...', '....#....'])); // console.log(solution(['..', '#.']));
출처 1. 프로그래머스 | 바탕화면 정리
'알고리즘 > Javascript 문제' 카테고리의 다른 글
피보나치 수열 (Fibonacci Sequence) - JavaScript (0) 2025.04.02 소수 (Prime) - JavaScript (0) 2025.04.01 순열, 조합, 팩토리얼 - JavaScript (0) 2025.03.13 [Softeer] Lv.2 바이러스 - JavaScript (0) 2025.02.27 [Softeer] Lv.2 연탄의 크기 - JavaScript (1) 2025.02.27