문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.
제한 조건
phone_number는 길이 4 이상, 20이하인 문자열입니다.
-내가 쓴 코드-
public class Solution {
public string solution(string phone_number)
{
string answer = "";
char[] phone_number_char = phone_number.ToCharArray();
for(int i = 0; i < phone_number_char.Length - 4; i ++)
{
phone_number_char[i] = '*' ;
}
for(int i = 0; i < phone_number_char.Length; i ++)
{
answer += phone_number_char[i];
}
return answer;
}
}
-다른사람의 코드-
public class Solution {
public string solution(string phone_number) {
string answer = "";
for (int i = 0; i < phone_number.Length; i++)
{
if (i < phone_number.Length - 4)
{
answer += "*";
}
else
{
answer += phone_number[i];
}
}
return answer;
}
}
나는 string형이 기본적으로 배열이라는 것에 대해서 알지 못해서 string형을 char형의 배열로 바꾸어서 일일이
계산해 주는 방식을 사용했는데, string은 기본적으로 배열이기 때문에 배열의 변수 하나 하나인 요소와 그 변수들의
주소 격인 인덱스를 가진다는 것에 대해서 알게 되었다.
또한 나였으면 for 반복문을 두번 돌려서 코드를 완성 했을 테지만 for문 안에 if else 문을 넣어서 반복문을 여러번
돌리지 않게끔 하는 방법도 있다는 것을 되새길 수 있었다.
** 주의** 문자열은 char배열로 구성되어있지만 char 배열은 문자열이 아니다
string 변수명 = new string(char배열); 로 char배열을 문자열로 만들 수 있다.
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 내 풀이 -
using System;
public class Solution
{
public int solution(int[] numbers)
{
int answer = 45;
for(int i = 0; i < numbers.Length; i++)
{
answer -= numbers[i];
}
return answer;
}
}
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
arr은 길이 1 이상인 배열입니다.
인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
- 처음에 작성했던 코드 -
using System;
public class Solution
{
public int[] solution(int[] arr)
{
int[] answer = new int[arr.Length-1];
Array.Sort(arr);
Array.Reverse(arr);
if(arr.Length>1)
{
for(int i = 0; i < arr.Length -1; i++)
{
answer[i] = arr[i];
}
}
else
{
Array.Resize(ref answer, 1);
answer[0] = -1;
}
return answer;
}
}
내가 했던 풀이는 입력된 배열이 {3,4,2,1} 이라면 {3,4,2}가 출력 되어야하는데 {4,3,2}가 출력되는
문제가 있었다.
- 풀이 방법1-
using System;
using System.Collections.Generic;
public class Solution
{
public int[] solution(int[] arr)
{
List<int> b = new List<int>(arr);
List<int> c = new List<int>(arr);
b.Sort();
c.Remove(b[0]);
if (c.Count == 0)
{
c.Add(-1);
}
return c.ToArray();
}
}
이렇게 리스트를 사용해 준다면 삽입과 삭제가 편리해지면서 더 간단하게 코드를 작성 할수 있다. + Sort로 오름차순으로 재배열 해준다면 위의 내 문제와 똑같은 문제가 발생하므로 리스트를 하나더 만들어서 결과값을 구하는 방식을 사용했다.
-풀이 방법2-
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] arr) {
//배열의 길이가 하나라면 해당 배열을 -1로 초기화 후 리턴
if(arr.Length==1) {arr[0] = -1; return arr;}
//가장 작은 수를 제거하기 위한 배열 첫 번째 수를 temp 변수에 대입
int temp = arr[0];
//0부터 배열 크기 까지 반복하면서 가장 작은 수를 판별
for(int i=0; i<arr.Length; i++)
{
if(temp>arr[i]) temp=arr[i];
}
//리스트 선언
List<int> list = new List<int>();
//리스트에 배열 넣기
list.AddRange(arr);
//리스트 중 가장 작은수 temp 제거
list.Remove(temp);
//answer 선언 후 리스트 배열화 해서 리턴
int[] answer = new int[] {};
answer = list.ToArray();
return answer;
}
}
리스트를 두번 사용해서 풀이하는 방법 말고도 반복문을 사용해서 가장 작은 수를 판별하고 리스트에서 제거해주는 방법도 만들 수 있다.