문제

정수 k에 따라 배열에 연속된 요소들의 합이 가장 큰 값을 출력하는 문제이다.

예를 들어 배열 [2,3,5,1,6] 일 때 k가 2일 경우 3+5=8 이 가장 크다. 

 

 

 

풀이 : 내가 작성한 코드

for(int i=0; i<inputArray.Length-k+1; i++) :

배열의 길이 - k +1인 이유는 아래 sum에 K만큼 연속된 요소를 더하기 위함이다. 

 

for(int j=i; j<k+i; j++) :

k+j로 요소길이 만큼 범위를 변경해준다,

 

풀이 : 다른 사람 코드

for(var i=0; i< k; ++i) : 처음 0부터 k번째까지의 요소의 합

Math.Max(maxSum, currentSum) 0이상 수중 큰 수를 리턴(if문을 안 씀)

for(var i=k; i <inputArray.Lenght; ++i) : k만큼의 요소를 더하는데 

배열 [2, 4, 10, 1] k가 2일 때 

currentSum += inputArray[i] - inputArray[i-k]; :

inputArray[0] + inputArray[1] += inputArray[2] - inputArray[0] 

inputArray[1] + inputArray[2]

 6 += 8   = 14 (두 번째 k길이 만큼의 요소합)

이렇게 이미 currentSum에서 전에 더한 요소가 있기 때문에 그것을 제외한 다음요소만

더해서 다음 k번째 길이만큼의 요소의 합을 구해준다.

 

내가 작성한 코드보다 연산횟수가 적다.

배열의 길이가 4, k가 2일 때 

내가 작성한 코드보다 for문을 5번더 적게 돈다.

 

 

반응형

문제

문자열을 받으면 몇 종류의 문자(char)가 있는지 체크하는 문제이다.

풀이 : 내가 작성한 코드

첫 번째 요소를 리스트에 넣고 두 번째 요소부터 리스트자료 집합에 있는 문자인지

체크하도록 했다. 함수와, 리스트를 새로 만들었고 문자를 계속 비교하는 과정이 효율적이지 않은 것 같다.

풀이 : 다른 사람 풀이

int 배열을 생성하고 두번 째 for문에서 비교가 끝난 문자에는 '1'을 넣어

중복 비교를 하지 않게 만들면서 중복요소를 체크한다.

반응형

문제

문자열 중 요소중 가장 인덱스가 가장 빠른 숫자를 리턴해야 하는 문제

풀이 : 내가 작성한 코드

내가 작성한 코드는 int.TryParse 숫자로 변환이 가능하면 true를 리턴하는 함수를 사용하여

숫자를 구분했다. ToString( )도 사용하고 사용하지 않는 int result로 선언하기도 해서 

그닥 좋아보이지 않다.

풀이 : 높은 순위에 있는 코드

char.IsDigit 10진수인지 판별하는 함수를 사용하여 숫자를 찾고있다.

몰랐던 함수였다.

 

 

반응형

문제

 

풀이




반응형

문제

a 배열의 요소를 X로 생각하고 모든 요소들에 차를 절대값으로 만든 뒤 그 뺀 값을 더한 값중

가장 작은 값을 가지는 배열의 요소를 출력하는 문제이다.

(값이 같다면 가장 배열의 요소중 가장 작은 값을 출력) 

풀이 : 내가 작성한 코드

코드만 봐도 대충 어떤 문제인지 알 수 있다. 

각 모든 요소를 비교해서 'sum'이 가장 작은 배열의 요소를 출력한다.

 

코드 시그널은 문제를 해결하면 다른 사람들이 푼 답을 볼 수가 있는데 

밑에는 가장 작은 글자수로 문제를 해결 한 사람의 풀이다...

풀이 : 다른 사람이 작성한 코드

이게 어떻게 가능하지 생가했는데 정확히 원하는 값을 가지는 제일 작은 요소를 출력한다.

포문2개나 쓴 내 코드는....;;

같은 문제를 가지고 이렇게도 생각을 할 수 있구나 라고 생각이 들었다.

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

04.08_CodeSignal(문자열 인덱스가 가장 빠른 숫자를 리턴)  (0) 2019.04.08
04.07_CodeSignal  (0) 2019.04.07
04.02_CodeSignal  (0) 2019.04.02
04.01_CodeSignal  (0) 2019.04.01
04.01_CodeSignal  (0) 2019.04.01

문제

가리키는 셀의 색상이 같으면 true를 리턴해주는 문제이다.

a1,a3,a5,a7 ...
b2,b4,b6,b8 ...
c1,c3,c5,c7 ...

위 셀들은 같은 색상(진한색)이다.

 

풀이

a1,a3,a5,a7 ...
b2,b4,b6,b8 ...
c1,c3,c5,c7 ...

(진한색)

a2,a4,a6,a8 ...
b1,b3,b5,b7 ...
c2,c4,c6,c8 ...

(옅은색)

 

보면 문자의 알파벳 다음인 숫자는 일정한 규칙으로 증가한다.

고로 색상이 같다는 것은 비교하려는 2개의 문자가 10진수로 변환하여 짝수인지

체크해주면 된다.

 

 

 

 

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

04.07_CodeSignal  (0) 2019.04.07
04.03_CodeSignal(배열 요소)  (0) 2019.04.03
04.01_CodeSignal  (0) 2019.04.01
04.01_CodeSignal  (0) 2019.04.01
03.31_CodeSignal  (0) 2019.03.31

문제

true 조건

1. 알파벳 a~z(A~Z)과 특수문자 '_', 숫자가 포함되어야한다.

2. 문자열 처음은 숫자가 오면 안된다.

풀이

if((int.TryParse(name[0].Tostring( ), out int a))) : 문자열 첫번째 문자가 int형인지 아닌지 체크한다 2번조건

for, if문 : 모든 문자를 비교하여 true 조건 체크

 

 

 

 

테스트

조건1
조건1
조건2

 

04.01

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

04.03_CodeSignal(배열 요소)  (0) 2019.04.03
04.02_CodeSignal  (0) 2019.04.02
04.01_CodeSignal  (0) 2019.04.01
03.31_CodeSignal  (0) 2019.03.31
03.29_CodeSignal  (0) 2019.03.29

 

문제

true조건 (IPv4address 약식 조건?)

1. '.'을 기준으로  4개 위치를 가지고 있어야함.

2. 각 위치 값이 0보다 크고 255보다 작아야함

3. 각 값들은 양의 정수이어야함.

 

풀이

String.Split('.') : '.'기준으로 나눈 값들을 배열의 요소로 담는다.

if(split.Lengt !=4) : true 2번 조건

int.tryParse(val, out int b)  : b를 int로 파싱하고(true를 반환) / 

불가능한 문자열이면 false를 반환한다. 

0 > b || b>255 : int로 파싱한 (int)b를 가지고 조건 범위에 벗어나지 않는지 체크한다. 

 

결과체크

 

true 2번 조건 255초과

true 3번조건 a는 int로 파싱불가

 

04.01

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

04.02_CodeSignal  (0) 2019.04.02
04.01_CodeSignal  (0) 2019.04.01
03.31_CodeSignal  (0) 2019.03.31
03.29_CodeSignal  (0) 2019.03.29
03.28_CodeSignal  (0) 2019.03.28

문제

풀이


//셋팅

int length : 각 배열하나당 글자수

int count : 배열의 갯수(문자열이 몇개인지)

string[] 배열을 생성 후 


//첫 째줄과 마지막 줄에 '*' 을 찍기 위한 과정

b[0] = new string('*', length); : 첫 번째 배열

b[count-1] = new string('*', length); : 마지막 배열


///b배열에 넣는 과정

for(int i=1; i< count-1; i++)

{ b[i] ="*" + b[i] + picture[i-1] + "*"; }

          * + 인풋문자열 + *




마지막 for문은 콘솔창에서 확인해보려고 넣음 (결과 의미없음)

test



03.31_CodeSignal

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

04.01_CodeSignal  (0) 2019.04.01
04.01_CodeSignal  (0) 2019.04.01
03.29_CodeSignal  (0) 2019.03.29
03.28_CodeSignal  (0) 2019.03.28
03.27_CodeSignal  (0) 2019.03.27

문제


풀이


if(val != ')') Push(val.ToString());')'전까지 스택에 저장한다.


else 


temp += stack.Pop();  stack에 "("이 나오기 전까지 temp담아둔다.


stack.Pop(); : "(" 괄호 제거

stack.push(val2,Tostring()); temp 결국 (bar) 괄호 안에있던 문자열을 넣게 되는것


<스택에 쌓인 문자>

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

04.01_CodeSignal  (0) 2019.04.01
03.31_CodeSignal  (0) 2019.03.31
03.28_CodeSignal  (0) 2019.03.28
03.27_CodeSignal  (0) 2019.03.27
03.26_CodeSignal  (0) 2019.03.26

문제



풀이

-1을 제외한 값을 내림차순으로 정렬

 a[i] 와 a[j]를 비교하여 비교 대상보다 자신의 값이 크면 뒤쪽으로 이동시켜준다.






03.28

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

03.31_CodeSignal  (0) 2019.03.31
03.29_CodeSignal  (0) 2019.03.29
03.27_CodeSignal  (0) 2019.03.27
03.26_CodeSignal  (0) 2019.03.26
03.07_CodeSignal(배열의 요소중 가장 큰수일 경우)  (0) 2019.03.07


문제


풀이

int 숫자를 리스트로 한 개씩 담는다.


ex) n = 1230

1230 % 10 = 0 //리스트add

1230 / 10 = 123; 

123 % 10 = 3 // 리스트add

123 / 10 = 12

12 % 10 = 2 // 리스트 add

12 / 10 = 1 

1 % 10 = 1 //리스트 add



03.27

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

03.29_CodeSignal  (0) 2019.03.29
03.28_CodeSignal  (0) 2019.03.28
03.26_CodeSignal  (0) 2019.03.26
03.07_CodeSignal(배열의 요소중 가장 큰수일 경우)  (0) 2019.03.07
02.05_CodeSignal(체스 말판)  (0) 2019.02.05

문제






풀이:


diff값을 -1로 초기화 해준다.


배열안에 있는 모든 값들이 서로 비교

if(i==j) : 모든 배열비교가 끝난 상태 밑에 else if조건을 만족하지 않았으니 diff값은 변경되지 않음 
=> continue를 통해 '-1'출력


else if : 두 값차이가 d보다 작고, 두 값차가 -1보다 크면 diff 값을 두 값차인 값으로 변경해준다.

2번째 부터는 diff보다 크면 변경 (앞의 조건 만족 후 현재 diff보다 두 값의 차이가 크다는 것은 d 값과 비교하는 두 값의 차이가 작다는 의미)



03.26

반응형

문제

int형 배열과 정수 k를 입력받는데, 배열 요소에 정수 k를 더 했을 경우 k를 더하지 않은 요소들과 비교해가장 큰 수가 될 경우를 카운팅해서 출력하는 문제이다. 

예를 들어 2,3,5,2 배열이 주어지고 정수 3이 주어지면 첫 번째 요소( 2 )에 정수k인 3을 더하면 5가 되는데 나머지 요소와 비교했을 때 가장 큰 수가 아니기 때문에 카운트하지 않게 된다.

이렇게 차레대로 비교를 하면 되는데 요소 3일 경우와 5일 경우는 정수 k를 더했을 때 요소중 가장 큰 수가 되기 때문에 출력 결과는 2를 출력하면 된다.

조건 : 요소 비교 중 값이 같을 경우는 가장 큰수가 될 수 없다.

 

풀이

처음 생각하기에는 처음 요소를 다른 요소와 비교하면서 가장 크다고 판단되면 카운트해서 그 카운트가 배열의 길이에서 1을 뺀 수와 같으면(자기 자신을 제외한 다른 요소들의 개수) 가장 크다고 판단하여 그 개수를 출력하려고 했지만.. 

위에 경우 처럼 배열의 길이에서 1을 뺀 값을 나를 제외한 나머지 요소들의 개수라고 판단해버리면 배열 요소 중 자신과 같은 값을 갖고 있는 요소가 있게 되면 요소에 k를 더한 후 비교할 때 동점인 경우는 체크하지 않기 때문에 카운트 값이 맞지 않는다.

반대로 생각해보면  k를 더한 요소보다 더하지 않은 요소중에 더 큰 경우가 있다면? 더 비교할 필요도 없이 그 요소는 배열의 요소중 가장 큰 요소라고 할 수 없다. 

if(i!=j && vote[j] >= max) : 자기 자신과의 비교는 제외하고, 배열의 요소중 더 큰 값이 있다면 break 키워드로 반복문을 빠져나온다.

if(cnt ==0 ) : cnt가 0인 경우가 자기 자신이 가장 큰 경우(k를 더했을 때)이기 때문에 cnt가 '0'인 요소일 때 resscent를 증가시키고 최종적으로 반환한다.

cnt를 bool 플래그로 쓴 것이다.

 

arcde46

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

03.28_CodeSignal  (0) 2019.03.28
03.27_CodeSignal  (0) 2019.03.27
03.26_CodeSignal  (0) 2019.03.26
02.05_CodeSignal(체스 말판)  (0) 2019.02.05
02.03_CodeSignal(자릿수를 줄인 가장 큰 수)  (0) 2019.02.03

파란색 : 풀면서 어려웠던 부분 or 고려해야 될 부분

빨간색 : 해결방법

초록색 : 느낀 점

문제

체스 말판이 위 특정 셀에 위치할 때 움직일 수 있는 방법의 개수를 구하는 문제이다.  특정 위치 이기 때문에  특정 셀 밑이거나 위에 있을 때 제한된다.

풀이 : 내가 작성한 코드

 

메모장에 적으면서

 처음 생각하기에 문자열의 앞cell[0]뒤cell[1] 8방향의 이동하게 문자를 더하는 값으로 확인이 가능할까 생각했지만 안된다고 판단하고, 체스 말이 위 체스 말이 움직 일 수 있는 방법이 최대 8가지이기 때문에 8방향을 모두 체크하고 각각 케이스에 검사하는 방법밖에 생각이 안 났다. 그래서 그냥 case문을..

풀이 : 다른 사람이 작성한 코드

가장 높은 vote를 받은 코드이다. 5개의 길이의 배열을 만드는데 무엇인가 했더니 체스 말판이 움직일 수 있는 방향 개수들이다. 그다음으로 문자 알파벳과 숫자를 체크하는데 'a'나 'h'를 빼는 이유는 체스가 저 두 문자에 위치했을 때 이동 방향 개수가 제한된다. 또, 체스 말판이 a에 가깝나 h에 가깝나를 체크한다. Math.Min(int,int )는 둘 중 작은 수를 반환하는 함수인데, 'a', h'에 가깝지 않아 2를 넘으면 4방향은 이동 가능이 보장이 된다. 반대로  마찬가지로 숫자 부분도 체크하여 리턴된 두 정수를 더한 뒤 배열에서 찾는다.. 

일단 문제 접근에 대한 방식 자체가 다르다ㅜ. 훨씬 더 깔끔하고 나도 문제에서 8가지 방향을 정해져 있다고 판단하고 포문을 8번 돌렸지만, 이 코드는 한 번 더 생각하여 제한된 이동 방향 개수 생각하고 그 값을 배열로 넣어두었다. 그리고 dist라는 말의 칸 이동 수가 정해져 있기 때문에 체스판 테두리에 가까웠을 때 제한되는 방법으로 깔끔하게 구현했다. 역시 접근 방법은 여러 가지로 생각하는 게 좋겠다. 

문제 : https://codesignal.com/

반응형

파란색 : 풀면서 어려웠던 부분 or 고려해야 될 부분

빨간색 : 해결방법

초록색 : 느낀 점

문제

문자 열중의 문자 한개를 빼서 자릿수를 하나 줄여 가장 큰 수를 출력하는 문제이다. 

풀이 : 내가 작성한 코드

문자열중 가장 작은 수를 빼면 가장 큰 수가 나 올 줄 알았다.  그런데 222250은  0이 가장 작은데 22225가 된다. 하지만 답은 22250이 되어야 하고 그래서 이건 아니고..., 앞 자릿수보다 뒷자리수가 크면 앞 자릿수를 빼면 된다. 인덱스 비교로 현재 값보다 다음 자릿수의 값이 크면 break로 빠져나와 그 숫자를 제거한다.

풀이 : 다른 사람이 작성한 코드

string s로 처음 받아온 숫자를 문자열로 바꾼 뒤 그 문자열에 서 해당하는 문자만 빼고 int형으로 리턴했다. 나는 형 변환도 많고, 굳이 안 써도 되는 집합 자료구조는 등 많이 사용하는 게 습관이 됐는데 최대한 쓰지 않는 방법으로 문제를 풀도록 해야겠다. 

문제 : https://codesignal.com/

반응형

'알고리즘자료구조 > 알고리즘문제' 카테고리의 다른 글

03.28_CodeSignal  (0) 2019.03.28
03.27_CodeSignal  (0) 2019.03.27
03.26_CodeSignal  (0) 2019.03.26
03.07_CodeSignal(배열의 요소중 가장 큰수일 경우)  (0) 2019.03.07
02.05_CodeSignal(체스 말판)  (0) 2019.02.05

+ Recent posts