[알린이의 코테 입문 #017 - 020] 수학, 배열
Category: Programmers
태그: Programmers
📍 수학, 배열
🔎 문제 1. 옷가게 할인 받기
🤔 나의 풀이 1번째 시도
using System;
public class Solution {
public int solution(int price)
{
var answer = 0;
if(price >= 100000 && price < 300000)
answer = price - price / 100 * 5;
else if(price >= 300000 && price < 500000)
answer = price - price / 100 * 10;
else if(price >= 500000)
answer = price - price / 100 * 20;
else
answer = price;
return answer;
}
}
이렇게 했는데, 내가 간과한 부분이 있다.
“price는 10원 단위로(1의 자리가 0) 주어집니다.” 이걸 보고 문득 떠오른게 만약 5%, 10%, 20%가 소수점으로 내려갈 경우, int값으로 연산할 경우 부정확한 값이 나올 수도 있겠다는 생각이 들었다.
using System;
public class Solution {
public int solution(int price)
{
double answer;
if(price >= 100000 && price < 300000)
answer = price - (double)price / 100 * 5;
else if(price >= 300000 && price < 500000)
answer = price - (double)price / 100 * 10;
else if(price >= 500000)
answer = price - (double)price / 100 * 20;
else
answer = price;
return (int)answer;
}
}
따라서 double로 받아서 마지막에 넘길 때 int형으로 변환한다.
😮 다른 사람의 풀이 확인
⚒️ 1번 풀이
using System;
public class Solution {
public int solution(float price) {
float answer = 0;
answer = price >= 500000 ? price * 0.8f : price >= 300000 ? price * 0.9f : price >= 100000 ? price * 0.95f : price;
return (int)answer;
}
}
이 풀이를 보고 느낀 것은 double까지 쓸 필요가 없고 float까지만 써도 됐었음.
무한의 삼항 연산자를 썼음.
그리고 5%, 10%, 20% 를 역으로 생각해서 0.95f, 0.9f, 0.8f을 곱한 값으로 비교를 함.
- 값이 500,000 이상일 경우 price * 0.8f
- 값이 500,000 이상이 아닐 경우 price >= 300,000
- 값이 300,000 이상일 경우 price * 0.9f
- 값이 300,000 이상이 아닐 경우 price >= 100,000
- 값이 100,000 이상일 경우 price * 0.95f
- 값이 100,000 이상이 아닐 경우 price
answer를 반환.
⚒️ 2번 풀이
using System;
public class Solution {
public int solution(int price) {
if (500000 <= price)
{
return (int)(price * 0.8f);
}
else if (300000 <= price)
{
return (int)(price * 0.9f);
}
else if (100000 <= price)
{
return (int)(price * 0.95f);
}
return price;
}
}
1번 풀이 코드를 if-else if로 풀어쓴 것.
🔎 문제 2. 아이스 아메리카노
🤔 나의 풀이
using System;
public class Solution {
public int[] solution(int money) {
var cups = (int)Math.Truncate(money / 5500d);
return new[]{cups, money - 5500 * cups};
}
}
위와 같이 해도 상관 없지만 더 깔끔한 방법이 있어서 가져옴.
😮 다른 사람의 풀이 확인
⚒️ 1번 풀이
using System;
public class Solution {
public int[] solution(int money) {
int[] answer = new int[2] { money / 5500, money % 5500 };
return answer;
}
}
비슷하지만 이게 더 나은 것 같음.
🔎 문제 3. 나이 출력
🤔 나의 풀이
using System;
public class Solution {
public int solution(int age) {
return 2022 - age + 1;
}
}
🔎 문제 4. 배열 뒤집기
🤔 나의 풀이
using System;
public class Solution {
public int[] solution(int[] num_list) {
Array.Reverse(num_list);
return num_list;
}
}
🤣 한마디
3, 4번은 쉬웠다.
이 게시물에는 지극히 주관적인 생각이 포함되어 있습니다.
오류나 틀린 부분, 또는 수정해야 할 부분이 있다면 언제든지 댓글 혹은 메일로 지적 부탁드립니다.
Comment