1. 가장 큰 수찾기
https://school.programmers.co.kr/learn/courses/30/lessons/120899
public int[] solution(int[] array)
{
int max = int.MinValue;
int idx = 0;
for (int i = 0; i < array.Length; i++)
{
if (max < array[i])
{
max = array[i];
idx = i;
}
}
int[] answer = new int[] { max, idx };
return answer;
}
이걸 한줄로 푸는 풀이가 있어서 가져와봤다
int[] answer = new int[2] { array.Max(), Array.IndexOf(array, array.Max()) };
Array 메서드인 Max(), IndexOf() 사용한다
2. 배열의 유사도
https://school.programmers.co.kr/learn/courses/30/lessons/120903
public int solution(string[] s1, string[] s2)
{
int answer = 0;
for (int i = 0; i < s1.Length; i++)
{
for (int j = 0; j < s2.Length; j++)
{
if (s1[i] == s2[j])
{
answer++;
}
}
}
return answer;
}
이거 lambda를 써서 푸는 풀이가 있어서 가져와봤다
int answer = s1.Count(x => s2.Contains(x));
3. 아이스 아메리카노
https://school.programmers.co.kr/learn/courses/30/lessons/120819
public int[] solution(int money)
{
int cups = money / 5500;
int change = money % 5500;
int[] answer = new int[] { cups, change };
return answer;
}
4. 짝수 홀수 개수
https://school.programmers.co.kr/learn/courses/30/lessons/120824
public int[] solution(int[] num_list)
{
int evens = num_list.Count<int>(x => x % 2 == 0);
int odds = num_list.Count<int>(x => x % 2 != 0);
int[] answer = new int[] { evens, odds };
return answer;
}
using System.Linq; 추가해야한다
5. 배열 원소의 길이
https://school.programmers.co.kr/learn/courses/30/lessons/120854
public int[] solution(string[] strlist)
{
List<int> lenList = new List<int>();
for (int i = 0; i < strlist.Length; i++)
{
lenList.Add(strlist[i].Length);
}
int[] answer = lenList.ToArray();
return answer;
}
int[] answer = new int[strlist.Length] { }; 를 하려고 했는데, 상수값만 가능하다고해서 조금 고민했다
이걸 되게 하는 방법은 없나?
포기하고 List<int>를 사용했다
using System.Collections.Generic;를 추가했다
가능하면 배열만으로 푸는 방법을 알아야 겠다고 생각해서 찾아봤더니
int[] answer = new int[strlist.Length];
뒤에 {} 붙이지 않으면 된다
6. 배열 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/120833
public int[] solution(int[] numbers, int num1, int num2)
{
int[] answer = new int[num2 - num1 + 1];
for (int i = num1; i <= num2; i++)
{
answer[i - num1] = numbers[i];
}
return answer;
}
7. 배열의 평균값
https://school.programmers.co.kr/learn/courses/30/lessons/120817
public double solution(int[] numbers)
{
double answer = 0;
for (int i = 0; i < numbers.Length; i++)
{
answer += numbers[i];
}
answer /= numbers.Length;
return answer;
}
8. 최댓값 만들기(1)
https://school.programmers.co.kr/learn/courses/30/lessons/120847
public int solution(int[] numbers)
{
int answer = 0;
for (int i = 0; i < numbers.Length; i++)
{
for (int j = i + 1; j < numbers.Length; j++)
{
answer = answer > numbers[i] * numbers[j] ? answer : numbers[i] * numbers[j];
}
}
return answer;
}
멋진 풀이가 있어서 가져와봤다
numbers = numbers.OrderByDescending(x => x).ToArray();
int answer = numbers[0] * numbers[1];
하지만 이 방식은 부호 구분이 없어서 음수 2개가 곱해서 최댓값이 나오는 경우를 구할 수 없다
9. 중복된 숫자 개수
https://school.programmers.co.kr/learn/courses/30/lessons/120583
public int solution(int[] array, int n)
{
int answer = 0;
for (int i = 0; i < array.Length; i++)
{
if (array[i] == n)
{
answer++;
}
}
return answer;
}
처음에 array.Count를 가지고 뭘 해보려다가 안돼서 c++ 작성하듯이 했다
찾아보니
int answer = array.Count(x => x == n);
매개변수로 lambda 표현이 들어가더라
10. 머쓱이보다 키 큰 사람
https://school.programmers.co.kr/learn/courses/30/lessons/120585
public int solution(int[] array, int height)
{
int answer = 0;
for (int i = 0; i < array.Length; i++)
{
if (array[i] > height)
{
answer++;
}
}
return answer;
}
이런 방법도 있다
int answer = array.Count(x => x > height);
11. 짝수는 싫어요
https://school.programmers.co.kr/learn/courses/30/lessons/120813
public int[] solution(int n)
{
int[] answer = new int[(n + 1) / 2];
for (int i = 0; i <= n; i++)
{
if (i % 2 == 1)
{
answer[i / 2] = i;
}
}
return answer;
}
시프트 연산을 이용한 방법이 있어서 가져와봤다
int[] answer = new int[(n + 1) / 2];
for (int i = 0; i < (n + 1) / 2; i++)
answer[i] = (i << 1) + 1;
lambda를 쓴 것도
int[] answer = Enumerable.Range(1, n).Where(x => x % 2 == 1).ToArray();
12. 삼각형의 완성조건(1)
https://school.programmers.co.kr/learn/courses/30/lessons/120889
public int solution(int[] sides)
{
sides = sides.OrderByDescending(x => x).ToArray();
int answer = sides[0] < sides[1] + sides[2] ? 1 : 2;
return answer;
}
나도 using System.Linq;를 적용해서 lambda를 적용해보았다
멋진 풀이가 있어서 가져와봤다
return sides.Max() < (sides.Sum() - sides.Max()) ? 1 : 2;
가장 긴 변의 길이를 찾고, 전체에서 그걸 빼면 나머지 두 길이의 합이다
13. 배열 뒤집기
https://school.programmers.co.kr/learn/courses/30/lessons/120821
public int[] solution(int[] num_list)
{
Stack<int> stack = new Stack<int>();
for (int i = 0; i < num_list.Length; i++)
{
stack.Push(num_list[i]);
}
int[] answer = new int[num_list.Length];
for (int i = 0; i < answer.Length; i++)
{
answer[i] = stack.Pop();
}
return answer;
}
stack을 쓰기로 해서 using System.Collections.Generic;를 추가했다
Array.Reverse(num_list);
return num_list;
Reverse가 있다니 조금은 허탈하다
그리고 배열 선언 후 역순으로 읽는것도 있다
14. 배열 회전시키기
https://school.programmers.co.kr/learn/courses/30/lessons/120844
public int[] solution(int[] numbers, string direction)
{
int[] answer = new int[numbers.Length];
if (direction.Equals("right"))
{
for (int i = 0; i < numbers.Length; i++)
{
answer[i] = numbers[(i - 1 + numbers.Length) % numbers.Length];
}
}
else if (direction.Equals("left"))
{
for (int i = 0; i < numbers.Length; i++)
{
answer[i] = numbers[(i + 1) % numbers.Length];
}
}
return answer;
}
다른 사람들도 "right" 인지 "left"인지 문자열을 확인하는 과정을 거쳤다
if(true == direction.Equals("left"))
switch(direction)
{
case "right":
이 부분은 어쩔 수 없는 것 같네
15. n의 배수 고르기
https://school.programmers.co.kr/learn/courses/30/lessons/120905
public int[] solution(int n, int[] numlist)
{
List<int> list = new List<int>();
for (int i = 0; i < numlist.Length; i++)
{
if (numlist[i] % n == 0)
{
list.Add(numlist[i]);
}
}
int[] answer = list.ToArray();
return answer;
}
using System.Collections.Generic; 를 추가했다
lambda를 사용하는 방법이 있어서 가져왔다
int[] answer = numlist.Where(x => x % n == 0).ToArray();
16. *외계행성의 나이 (힌트: 아스키코드)
https://school.programmers.co.kr/learn/courses/30/lessons/120834
public string solution(int age)
{
char[] charArr = age.ToString().ToCharArray();
string answer = "";
for (int i = 0; i < charArr.Length; i++)
{
answer += (char)(charArr[i] + 49);
}
return answer;
}
ascii로 바꾼다
97 == a
48 == 0
즉 49를 더해야한다
좋은 방법이 있어서 가져왔다
while(age>0)
{
answer=(char)(age%10+97)+answer;
age/=10;
}
이것도 괜찮다
string answer = string.Concat(age.ToString().Select(x => (char)(Convert.ToInt32(x.ToString()) + 97)));
17. *최댓값 만들기(2)
나도 위의 최댓값 만들기 문제에서 음수를 고려하지 않았다
int.MinValue를 사용했다
https://school.programmers.co.kr/learn/courses/30/lessons/120862
int answer = int.MinValue;
for (int i = 0; i < numbers.Length; i++)
{
for (int j = i + 1; j < numbers.Length; j++)
{
answer = answer > numbers[i] * numbers[j] ? answer : numbers[i] * numbers[j];
}
}
return answer;
괜찮은 풀이가 있어서 가져왔다
int maxLen = numbers.Length-1;
Array.Sort(numbers);
return (int)MathF.Max(numbers[0]*numbers[1], numbers[maxLen]*numbers[maxLen-1]);
18. *주사위의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/120845
public int solution(int[] box, int n)
{
int x = box[0] / n;
int y = box[1] / n;
int z = box[2] / n;
int answer = x * y * z;
return answer;
}
19 *숫자 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/120897
using System.Collections.Generic; 추가해야한다
public int[] solution(int n)
{
// num의 약수를 모두 구해서 배열에 넣어야한다
List<int> divisors = new List<int>();
for (int i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
divisors.Add(i);
divisors.Add(n / i);
}
}
divisors.Sort();
int[] answer = divisors.ToArray();
return answer;
}
계속 테스트 2개를 통과못했는데
이유를 찾아보니
제곱수일때 같은것이 2번이 들어간다
그래서 수정했다
public int[] solution(int n)
{
// num의 약수를 모두 구해서 배열에 넣어야한다
List<int> divisors = new List<int>();
for (int i = 1; i * i <= n; i++)
{
if (n % i == 0)
{
divisors.Add(i);
if (i != n / i)
{
divisors.Add(n / i);
}
}
}
divisors.Sort();
int[] answer = divisors.ToArray();
return answer;
}