오늘은 팀 프로젝트를 마무리하고 발표까지 진행했다. 때문에 다른 것을 개발하며 공부할 시간이 없었다. 그래서 오늘은 팀 프로젝트를 통해 C#이 얼마나 익숙해졌는지 테스트 해볼겸 틈틈히 프로그래머스에서 제공하는 문제들을 풀었다.
<문제>
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
<제한 사항>
using System; public class Solution { public int solution(int[] absolutes, bool[] signs) { int answer = 123456789; int sum = 0; for(int i=0;i<absolutes.Length;i++){ if(signs[i]){ sum += absolutes[i]; } else{ sum += absolutes[i] * -1; } } answer = sum; return answer; } }
<풀이>
정수들의 절대값을 저장해둔 absolutes 배열의 길이와 부호를 저장해둔 signs 배열의 길이가 같으므로 둘 중 하나의 길이만큼 for문을 돌면서 signs배열을 확인하여 true면 sum에 absolutes의 값을 그대로 더해주고 false면 absolutes 값에 -1을 곱해서 sum에 더해주면 되는 문제이다.
<문제>
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
<제한 사항>
using System; public class Solution { public int solution(int[] numbers) { int answer = -1; bool[] arr = new bool[10]; for(int i=0;i<numbers.Length;i++){ arr[numbers[i]] = true; } int sum = 0; for(int i=0;i<arr.Length;i++){ if(arr[i] == false){ sum += i; } } answer = sum; return answer; } }
<풀이>
먼저 0~9까지의 인덱스가 존재하는 크기가 10인 bool 타입 arr[] 배열을 만들어준다. 이후 numbers를 for문을 통해 순회하면서 numbers에 존재하는 값이면, arr[numbers[i]] 값을 true로 바꾼다. 마지막으로 arr[]배열을 for문을 통해 순회하면서 arr[i]번째 값이 false면 numbers에 없는 값이므로 sum에 더해주면 된다.
<문제>
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
<제한 사항>
using System.Collections.Generic; public class Solution { public List<int> solution(int[] arr) { List<int> answer = new List<int>(); int min = 2147483647; for(int i=0;i<arr.Length;i++){ if(arr[i] < min){ min = arr[i]; } } for(int i=0;i<arr.Length;i++){ if(arr[i] == min){ continue; } answer.Add(arr[i]); } if(answer.Count == 0){ answer.Add(-1); } return answer; } }
<풀이>
주어진 arr[] 배열을 for문으로 순회하며 최소값을 찾아주고, 다시 arr[] 배열을 for문으로 순회하며 최소값 이외의 값을 answer List에 추가해주면된다. 그리고 마지막에 List가 비어있으면 -1을 추가해주면 된다.
<문제>
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
<제한 사항>
public class Solution { public string solution(string phone_number) { string answer = ""; for(int i=0;i<phone_number.Length-4;i++){ answer += "*"; } for(int i=phone_number.Length-4;i<phone_number.Length;i++){ answer += phone_number[i]; } return answer; } }
<풀이>
전화번호의 뒷자리 4개를 뺀 길이만큼 *을 answer에 붙혀준다음 전화번호의 뒷자리 4개를 붙혀주면 되는 아주 간단한 문제이다.
<문제>
길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.
이때, a와 b의 내적은 a[0]b[0] + a[1]b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)
<제한 사항>
using System; public class Solution { public int solution(int[] a, int[] b) { int answer = 1234567890; int sum = 0; for(int i=0;i<a.Length;i++){ sum += a[i] * b[i]; } answer = sum; return answer; } }
<풀이>
내적의 구하는 공식을 for문을 통해 구현하면 되는 간단한 문제이다.
<문제>
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
<제한 사항>
public class Solution { public string solution(string s) { string answer = ""; bool isOdd = false; if(s.Length % 2 == 0){ isOdd = false; } else{ isOdd = true; } if(isOdd){ answer += s[s.Length/2]; } else{ answer += s[s.Length/2-1]; answer += s[s.Length/2]; } return answer; } }
<풀이>
먼저 단어의 길이가 홀수 인지 짝수인지 판단을 해주고 홀수면 가운데 있는 글자를 반환하고, 짝수면 가운데 있는 글자 2개를 반환하면 된다.
<문제>
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
<제한 사항>
public class Solution { public string solution(int n) { string answer = ""; for(int i=0;i<n;i++){ if(i%2==0){ answer += "수"; } else{ answer += "박"; } } return answer; } }
<풀이>
for문을 통해 0부터 n까지 돌며 i가 0이거나 짝수일 땐 answer에 "수"를 더해주고, 홀수 일 땐 "박"을 더해주면 된다.
<문제>
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
<제한 사항>
using System; public class Solution { public int solution(int left, int right) { int answer = 0; for(int i=left;i<=right;i++){ int count = 0; for(int j=1;j<=i;j++){ if(i%j==0){ count++; } } if(count % 2 == 0){ answer += i; } else{ answer -= i; } } return answer; } }
<풀이>
for문으로 left부터 right까지 돌면서 각 수를 1부터 자기 자신까지 나눠주면서 약수의 개수를 세어준다. 그리고 약수의 개수가 짝수면 answer에 더해주고 홀수면 answer에서 빼주면 된다.