분류 전체보기 130

[C#] 소수찾기 - 프로그래머스

문제 :1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 리턴하시오! 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한조건 n은 2이상 1000000이하의 자연수입니다. 풀이 : 대학때도 많이 풀었고, 정처기 필기 알고리즘 부분에서도 다뤄서 쉽게 생각했다가...큰코를 다친 문제였다.. 처음 문제를 풀었을때 정확성에서 3개틀리고,(시간초과) 효율성은0점을 받아... 소수 판별관련하여 다시 찾아보았다.. 1. 기본 방법 : 소수는 1과 자기자신만을 약수로 가지고있으니 2부터 n-1 까지 수로 나눠지면 안된다! : 이방법으로 생각없이 했다가 숫자가 커질경우 시간복잡도가 크게 올라가는걸 알게되어 다른 방법을 모색해야했다. 2. 제곱근 : 소수이기에 필요 충분 조건은 주어..

알고리즘/C# 2020.10.15

객체지향, 절차지향 이란?

소프트웨어를 구현한다는것은 최정적으로는 소프트웨어를 구성하는 데이터와 데이터를 조작하는 코드를 작성하는것! 1. 절차 지향이란? : 데이터를 조작하는 코드를 별도로 분리해서 함수나 프로시저와 같은 형태로 만들고, 각 프로시저들이 데이터를 조작하는 방식으로 코드를 작성할 수 있을것이다. 프로시저는 다른 프로시저를 사용할 수도 있고, 각각의 프로시저가 같은 데이터를 사용할 수도 있다. 이렇게 프로시저로 프로그램을 구성하는 기법을 절차지향 프로그램이라 부른다. 각 프로시저는 데이터를 사용해서 기능을 구현하며, 필요에 따라 다른프로시저를 사용하기도 한다. 최초 프로그램 작성은 데이터에 따라 프로시저를 만드므로 쉬울수는 있으나, 데이터가 늘어나고, 타입이 변경이 되어지 서로 연관되어있는 프로시저 들을 모두 수정해..

TIL/객체지향 2020.10.15

[C#] 서울에서 김서방 찾기 - 프로그래머스

문제 : String형 배열 seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 리턴하시오! 제한사항 : seoul은 길이 1 이상, 1000 이하인 배열입니다. seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다. Kim은 반드시 seoul 안에 포함되어 있습니다. 풀이 : for 문이 더빠른거같은 느낌.... ㅎ public static string solution(string[] seoul) { string answer = ""; int index = seoul.ToList().FindIndex(x => x.Equals("Kim") == true); answer = $"김서방은 {index}에 있다"; return answer; }

알고리즘/C# 2020.10.14

[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# 코딩의 기술

이번주에 제발 읽어보자라는 느낌으로 읽은 책이다... 이책을 산건 첫 회사 다닐때쯤 이니...거의 3년 지나서야 읽게 된거 같다. 대화식의 흐름 과 잘못된 예 와 잘된 예를 한번에 볼 수 있어서 이해하기 쉬운 구조의 책이었고, 아직 이해가 안되는 부분도 많았지만 개발을 공부, 일을 하다가 나중에 또 보게 된다면 다시 배울 수있는 책이라고 생각이 들었다! 다음책인 실전편도 읽어바야할것 같다!

ETC../책! 2020.10.10

[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