알고리즘 82

[C#] 문자열 다루기 기본 - 프로그래머스

문제 : 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴! 제한 사항 s는 길이 1 이상, 길이 8 이하인 문자열입니다. 풀이 : 처음에 Try Catch 로 예외발생 시 false 를 Return 시키는 코딩을 하려다가 try catch 는 안쓰는게 좋다는 C# 코딩의 기술책에서 읽었으니 다른 방식으로 생각하여 그냥 Tryparse 를 사용하여 진행! public static bool solution(string s) { bool answer = true; int result; if (s.Length == 4 || s.Length == 6) { if (!int.Try..

알고리즘/C# 2020.10.14

[C#] 문자열 내림차순으로 배치하기 - 프로그래머스

문제 : 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하시오! 제한사항 : str은 길이 1 이상인 문자열입니다. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 풀이 : 처음에 문제를 풀었을 때 시간이 너무 오래 걸려서 다른사람 풀이를 보고 다시 정리하였다. 무분별한 Linq 사용은 오히려 속도를 저하 시킬 수 있다는걸 알게되었다... char[] 은! new string으로 다시 할당할 수 있는것을 알게되었다! public static string solution(string s) { string answer = ""; char[] v = s.AsEnumerable().Select(x => x).OrderByDescending(y ..

알고리즘/C# 2020.10.13

[C#] 3진법 뒤집기 - 프로그래머스

문제 : 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하시오! 제한사항 : n은 1 이상 100,000,000 이하인 자연수입니다. 풀이 : 10진법을 3진법으로 나타내고 이를 뒤집어야 하는 상황에 10진법으로 다시 바꿔라....라고 해서 뒤집는 부분의 시간을 줄이면 어떨까라는 생각에 Stack 을 사용하기로 하였다! 10진법을 3진법으로 나누면서 Stack 에 쌓고 몫이 0이 되었을 시 Stack 에서 하나씩 꺼내와 10진법으로 변환! public static int solution(int n) { int answer = 0; int division; int lastValue; Stack s = new Stack(); whi..

알고리즘/C# 2020.10.12

[C#] 문자열 내 마음대로 정렬하기 - 프로그래머스

문제 : 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하여라! 제한조건 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 풀이 : 무리 없이 풀긴했는데.... 다른사람 풀이랑 비슷하지만 속도가 남다른 코딩을 찾아서 다시 공부 해야할것같다. 그래도 이번에 Thenby 라는 함수를 알게 되었다! static string[] strings = { "abce",..

알고리즘/C# 2020.10.11

[C#] 두정수 사이의 합- 프로그래머스

문제 : 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하시오 제한조건 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. a와 b의 대소관계는 정해져있지 않습니다. 풀이 : linq 를 사용하기 위해 배열을 만들어서 해볼까 생각 해보면서 고민 하다가 시간이 걸리지않는것도 중요할 것같아 생각나는 대로 바로 코딩을 진행 했다.. 무리하게 아는 지식을 쓰지 않고 직관적으로 짜는것도 중요하다는것을 C# 코딩의 기술 을 읽고 다시 생각하게 되었다.. Keep It Simple Stupid 이말이 제일 인상깊다.. public static long solution(int a, int b) { long ans..

알고리즘/C# 2020.10.10

[C#] 나누어 떨어지는 숫자 배열 - 프로그래머스

문제 : array 에 element 중 divisor 로 나누어 떨어지는 값을 오름차순으로 정렬된 배열 을 반환하는 함수 만약 divisor 로 나누어떨어지는 element가 없을시 -1 을 반환 제한사항 arr은 자연수를 담은 배열입니다. 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다. - 뭔말인지..이해못햇다.. divisor는 자연수입니다. array는 길이 1 이상인 배열입니다. 풀이 : 정렬을 진행 하고 for 문을 돌려 나누고 값에 따라 배열에 대입 하면 되지만 for 문을 쓰고싶지 않아 linq 를 적극 활용해보자고 생각하고 풀었고, 더합쳐보고싶다..

알고리즘/C# 2020.10.09

[C#] 가운데 글자 가져오기- 프로그래머스

문제 : string 변수가 주어지며 길이가 짝수 일 시 가운데 두글자 홀 수 일 시 가운데 글자 반환 제한 s는 길이가 1 이상, 100이하인 스트링입니다. 풀이 : 문제 자체에서 Substring을 사용하라는거 같아서 쓰지 않고 해보려고 풀었다.. public static string solution(string s) { string answer = ""; if (s.Length % 2 == 0) answer = s.AsEnumerable().ElementAt(s.Length / 2 - 1).ToString() + s.AsEnumerable().ElementAt(s.Length / 2).ToString(); else answer = s.AsEnumerable().ElementAt(s.Length / ..

알고리즘/C# 2020.10.08

[C#] 2016년 - 프로그래머스

문제 : 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각[SUN,MON,TUE,WED,THU,FRI,SAT] 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환 제한조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 풀이 : 1월 1일 부터 원하는 날짜까지 일수를 전부 구하고 나머지 값으로 배열 Index 대입 public static string solution(int a, int b) { strin..

알고리즘/C# 2020.10.07

[C#] 체육복 - 프로그래머스

문제 : 전체 학생수 n, 체육복 을 도난당한 학생들의 번호가 담긴 배열 Lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve 가 매개변수로 주어질때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 을 작성 단 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있다. 제한 사항 전체 학생의 수는 2명 이상 30명 이하입니다. 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다. 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다. 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다. 여벌 체육복을 가져온 학생이 체..

알고리즘/C# 2020.10.06

[C#] K번째 가져오기 - 프로그래머스

문제 : array 의 i 번째 숫자부터 j 번째 숫자까지 자르고 정렬했을때 K 번째의 수를 구하기 예시 : [1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다. [1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다. [1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다. 풀이 - 처음에 2자리 이상 수를 생각하지 않고 array 배열을 string으로 바꾸고 자른후 다시 캐스팅을 했다가 문제 제출시 Error 가 발생해서.. 다시 문제 를 풀었다.. - 다른 문제 풀이 봤는..

알고리즘/C# 2020.10.05