일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- programmers
- Clean Code
- data science methodology
- 알고리즘
- softeer
- IBM
- 소프티어
- 파이썬
- 부스트캠프
- AI Mathematics
- 데이터 사이언스
- Boostcamp AI
- string
- Data Science
- 클린코드
- 클린코드 파이썬
- 오블완
- 코테
- 티스토리챌린지
- 코세라
- 데이터사이언스
- Coursera
- Python
- 코딩테스트
- 깨끗한 코드
- 데이터과학
- 자바
- 문자열
- 프로그래머스
- Today
- Total
떼닝로그
[Java] Softeer 진정한 효도 (min/max, 그리고 진정한 구린 코드) 본문
[Java] Softeer 진정한 효도 (min/max, 그리고 진정한 구린 코드)
문제 링크 : https://softeer.ai/practice/7374
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
기록의 이유...
진정한 구린 코드를 보러 오셨나요? 잘 오셨습니다
사실 이 문제 여러 번 틀렸습니다
이유가 뭐냐... 문제를 잘못 읽었기 때문입니다.
예시에는 분명 땅을 깎는 것만 나와 있는데,
문제를 다시 읽어보면 땅을 높이는 것도 가능하다 이말입니다
이 허점을 찾으려고 검색하신 분들도 계시겠죠? (제발)
그리고 하나 애를 먹었던 게...
min/max 값 구하는 게 너무 어려웠습니다
원래 파이썬에서는 그냥 min(변수명, 여러 개도 가능) 이런 식이었는데 자바는 좀 다르네요
1. Math.min(a, b) / Math.max(a, b)
두 개의 값을 가지고 비교할 때 사용하면 됩니다.
다만, 두 개 이상의 값은 안됩니다
또한, 변수 안의 값이 list나 array 이런 타입이면 안됩니다.
2. 그러면 여러 개의 값들 중에서 min/max를 구하고 싶다면?
2-1. max/min 겹쳐서 여러 번 쓰기.
Math.max(Math.max(a, b), c)
2-2. 새로운 배열 만들어서 그 안의 max/min값 구하기
List<Integer> tmpli = Arrays.asList(a, b, c);
max = Collections.max(tmpli);
... 정말 최악이네요
파이썬 만세입니다
하지만 익숙해지면 자바가 좋긴 하겠죠?
근데 정말 보면 볼수록 OOP를 위해서라면 이런 자바나 C#을 사용하는 것이 좋아보이기는 합니다
딱 명확하거든요...
물론 파이썬도 하나의 객체지향 언어라고는 하지만,,,
꼼수 부릴 땐 파이썬이 최고, 정석으로 공부하려면 C/C++/Java가 역시 짱인 것 같네요
제출 코드 (정답, 지저분함 주의)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] board = new int[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
board[i][j] = sc.nextInt();
}
}
int cost = 999;
for(int i=0;i<3;i++){
// 가로
int lowest = 999;
int highest = 0;
// System.out.println(lowest);
for(int j=0;j<3;j++){
lowest = Math.min(lowest, board[i][j]);
highest = Math.max(highest, board[i][j]);
}
int l_tmpcost = 0;
int h_tmpcost = 0;
for(int j=0;j<3;j++){
l_tmpcost += board[i][j] - lowest;
h_tmpcost += highest - board[i][j];
}
cost = Math.min(cost, l_tmpcost);
cost = Math.min(cost, h_tmpcost);
// 세로
lowest = 999;
highest = 0;
for(int j=0;j<3;j++){
lowest = Math.min(lowest, board[j][i]);
highest = Math.max(highest, board[j][i]);
}
l_tmpcost = 0;
h_tmpcost = 0;
for(int j=0;j<3;j++){
l_tmpcost += board[j][i] - lowest;
h_tmpcost += highest - board[j][i];
}
cost = Math.min(cost, l_tmpcost);
cost = Math.min(cost, h_tmpcost);
}
System.out.println(cost);
}
}
부끄럽네요...
'Algorithms > Softeer' 카테고리의 다른 글
[Java] Softeer 연탄의 크기 (배열 정렬) (2) | 2024.11.01 |
---|---|
[Java] Softeer 바이러스 (자료형 관리) (5) | 2024.10.31 |
[Java] Softeer 금고 털이 (HashMap) (2) | 2024.10.31 |
[Java] Softeer 나무 공격 (배열) (2) | 2024.10.31 |
[Java] Softeer 나무 출력 - (출력 문자열 포함, StringBuilder) (4) | 2024.10.24 |