[02] 2차원 배열 (2D Array)

2차원 배열

참고 문헌 (Ch37): https://dojang.io/mod/page/view.php?id=306

2차원 배열의 선언 및 요소 접근

배열 선언: (자료형) (배열이름)[행 크기][열 크기] = 초기 값;

1
2
3
4
5
int numArr[3][4] = { // 3행 4열 짜리 행렬을 선언
{ 가로 요소 4개 }, // 첫번째 행의 초기 값
{ 가로 요소 4개 }, // 두번째 행의 초기 값
{ 가로 요소 4개 }, // 세번째 행의 초기 값
}; // ↑ 세로 3줄

원소 접근: (배열이름)[행 인덱스][열 인덱스]

1
int num1 = numArr[1][2];    // 2차원 배열에서 세로 인덱스 1, 가로 인덱스 2인 요소에 접근
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main()
{
int numArr[3][4] = { // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
{ 11, 22, 33, 44 },
{ 55, 66, 77, 88 },
{ 99, 110, 121, 132 }
};
// ↓ 세로 인덱스
printf("%d\n", numArr[0][0]); // 11 : 행 인덱스 0, 열 인덱스 0인 요소 출력
printf("%d\n", numArr[1][2]); // 77 : 행 인덱스 1, 열 인덱스 2인 요소 출력
printf("%d\n", numArr[2][0]); // 99 : 행 인덱스 2, 열 인덱스 0인 요소 출력
printf("%d\n", numArr[2][3]); // 132: 행 인덱스 2, 열 인덱스 2인 요소 출력
// ↑ 가로 인덱스

return 0;
}

2차원 배열 요소 0으로 초기화

1차원 배열에서 요소를 0으로 초기화하는 것과 같은 방법으로 진행된다!

1
2
3
4
5
6
7
8
9
10
int main(){
int numArr[3][4] = {0, }; // 2차원 배열의 요소를 모두 0으로 초기화

printf("%d \n", numArr[0][0]); // 0: 행 인덱스 0, 열 인덱스 0인 요소 출력
printf("%d \n", numArr[1][2]); // 0: 행 인덱스 1, 열 인덱스 2인 요소 출력
printf("%d \n", numArr[2][0]); // 0: 행 인덱스 2, 열 인덱스 0인 요소 출력
printf("%d \n", numArr[2][3]); // 0: 행 인덱스 2, 열 인덱스 3인 요소 출력

return 0;
}

2차원 배열의 요소에 값 할당하기

원소 값 할당: (배열이름)[행 인덱스][열 인덱스] = 값;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>

int main(){
int numArr[3][4];

numArr[0][0] = 11; // 행 인덱스 0, 열 인덱스 0인 요소에 값 할당
numArr[0][1] = 22; // 행 인덱스 0, 열 인덱스 1인 요소에 값 할당
numArr[0][2] = 33; // 행 인덱스 0, 열 인덱스 2인 요소에 값 할당
numArr[0][3] = 44; // 행 인덱스 0, 열 인덱스 3인 요소에 값 할당

numArr[1][0] = 55; // 행 인덱스 1, 열 인덱스 0인 요소에 값 할당
numArr[1][1] = 66; // 행 인덱스 1, 열 인덱스 1인 요소에 값 할당
numArr[1][2] = 77; // 행 인덱스 1, 열 인덱스 2인 요소에 값 할당
numArr[1][3] = 88; // 행 인덱스 1, 열 인덱스 3인 요소에 값 할당

numArr[2][0] = 99; // 행 인덱스 2, 열 인덱스 0인 요소에 값 할당
numArr[2][1] = 110; // 행 인덱스 2, 열 인덱스 1인 요소에 값 할당
numArr[2][2] = 121; // 행 인덱스 2, 열 인덱스 2인 요소에 값 할당
numArr[2][3] = 132; // 행 인덱스 2, 열 인덱스 3인 요소에 값 할당

printf("%d\n", numArr[0][0]); // 11 : 행 인덱스 0, 열 인덱스 0인 요소 출력
printf("%d\n", numArr[1][2]); // 77 : 행 인덱스 1, 열 인덱스 2인 요소 출력
printf("%d\n", numArr[2][0]); // 99 : 행 인덱스 2, 열 인덱스 0인 요소 출력
printf("%d\n", numArr[2][3]); // 132: 행 인덱스 2, 열 인덱스 3인 요소 출력

printf("%d\n", numArr[-1][-1]); // 음수이므로 잘못된 인덱스
printf("%d\n", numArr[0][4]); // 열 인덱스가 배열의 범위를 벗어남
printf("%d\n", numArr[4][0]); // 행 인덱스가 배열의 범위를 벗어남
printf("%d\n", numArr[5][5]); // 행, 열 인덱스 모두 배열의 범위를 벗어남

return 0;
}

2차원 배열의 크기 구하기

1차원 배열과 마찬가지로 “sizeof”를 이용하여 구한다.
배열 전체에 sizeof를 적용하고, 한 행의 sizeof로 나눠주면 행의 개수가 나오고, 한 행에서 sizeof를 적용하고, 원소를 이루고 있는 자료형의 크기로 나눠주면 열의 개수가 나온다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main(){
int numArr[3][4] = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};

printf("%d \n", sizeof(numArr)); // int의 크기 * 배열의 원소 갯수인 값이 나온다.

int row = sizeof(numArr) / sizeof(numArr[0]); // 행의 크기, 전체 배열의 크기에서 한 행의 크기를 나눈다.

int col = sizeof(numArr[0]) / sizeof(int); // 열의 크기, 한 행의 크기에서 원소의 자료형의 크기를 나눈다.

printf("%d\n", row);
printf("%d\n", col);

return 0;
}

2차원 배열 요소 모두 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int main()
{
int numArr[3][4] = { // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
{ 11, 22, 33, 44 },
{ 55, 66, 77, 88 },
{ 99, 110, 121, 132 }
};

int col = sizeof(numArr[0]) / sizeof(int); // 4: 2차원 배열의 열 크기를 구할 때는 한 행의 크기를 요소의 크기로 나눠줌

int row = sizeof(numArr) / sizeof(numArr[0]); // 3: 2차원 배열의 행 크기를 구할 때는 배열이 차지하는 전체 공간을 한 행의 크기로 나눠줌

for (int i = 0; i < row; i++) // 2차원 배열의 행 크기만큼 반복
// for (int i = row - 1; i >= 0; i--) // 행 크기 - 1부터 역순으로 반복, -1부터 하는 이유는 인덱스 시작이 0이기 때문
{
for (int j = 0; j < col; j++) // 2차원 배열의 열 크기만큼 반복
//for (int j = col - 1; j >= 0; j--) // 열 크기 - 1부터 역순으로 반복, -1부터 하는 이유는 인덱스 시작이 0이기 때문
{
printf("%d ", numArr[i][j]); // 2차원 배열의 인덱스에 반복문의 변수 i, j를 지정
}
printf("\n"); // 열 요소를 출력한 뒤 다음 줄로 넘어감
}

return 0;
}

2차원 배열을 포인터에 넣기

단순한 생각: 1차원 배열 - 단일 포인터 -> 2차원 배열 - 이중 포인터

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h.>

int main(void){
int numArr[3][4] = { // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언
{ 11, 22, 33, 44 },
{ 55, 66, 77, 88 },
{ 99, 110, 121, 132 }
};

int **numPtr = numArr; // 자료형이 다르다는 경고 발생

printf("%d\n", numPtr[0][0]); // 실행 에러

return 0;
}
// 아래와 같은 에러 발생
// g:\Dropbox\Workspace\C_Study\TestPage.c: In function 'main':
// g:\Dropbox\Workspace\C_Study\TestPage.c:60:20: warning: initialization of 'int **' from incompatible pointer
// type 'int (*)[4]' [-Wincompatible-pointer-types]
// int **numPtr = numArr; // ?1;35mm^~~~~~

2차원 배열 포인터 선언: (자료형) ((배열포인터이름)*)**[열 크기]

1
int (*numPtr)[4]; // 2차원 배열 포인터 선언

주의사항

1
2
3
int *numPtr[4]; // int형 포인터 4개를 담을 수 있는 배열 선언
int num1, num2, num3, num4;
int *numPtr[4] = { &num1, &num2, &num3, &num4 }; // int형 포인터를 4개 담는 배열

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>

int main()
{
int numArr[3][4] = { // 세로 3, 가로 4 크기의 int형 2차원 배열 선언
{ 11, 22, 33, 44 },
{ 55, 66, 77, 88 },
{ 99, 110, 121, 132 }
};

int (*numPtr)[4] = numArr;

printf("%p\n", *numPtr); // 2차원 배열 포인터를 역참조하면 첫 번째 열의 주소가 나옴
// 컴퓨터마다, 실행할 때마다 달라짐

printf("%p\n", *numArr); // 2차원 배열을 역참조하면 첫 번째 열의 주소가 나옴
// 컴퓨터마다, 실행할 때마다 달라짐

printf("%d\n", numPtr[2][1]); // 110: 2차원 배열 포인터는 인덱스로 접근할 수 있음

printf("%d\n", sizeof(numArr)); // 48: sizeof로 2차원 배열의 크기를 구하면 배열이 메모리에
// 차지하는 공간이 출력됨

printf("%d\n", sizeof(numPtr)); // 4 : sizeof로 2차원 배열 포인터의 크기를
// 구하면 포인터의 크기가 출력됨(64비트라면 8)

return 0;
}

// 내가 실행시켰을 떄의 결과
// 0061FE9C
// 0061FE9C
// 110
// 48
// 4

2차원 배열 포인터도 일반적인 배열과 동일한 방법으로 원소 접근이 가능하다!
결과에서 볼 수 있는 것처럼 배열 포인터가 더 작은 메모리를 사용한다.

3차원 배열

3차원 배열 선언: (자료형) (배열이름)[높이][행 크기][열 크기]

예시

1
2
3
4
5
6
7
8
9
10
11
12
int numArr[2][3][4] = {
{
{ 11, 22, 33, 44 },
{ 55, 66, 77, 88 },
{ 99, 110, 121, 132 }
},
{
{ 111, 122, 133, 144 },
{ 155, 166, 177, 188 },
{ 199, 1110, 1121, 1132 }
}
};

3차원 배열 원소 접근: (배열이름)[높이][행 인덱스][열 인덱스]

3차원 배열 원소 값 대입: (배열이름)[높이][행 인덱스][열 인덱스] = 값;

3차원 배열 포인터에 할당: (자료형) ((포인터 이름)*)**[행 크기][열 크기]

[01] 1차원 배열 (1D Array)

1차원 배열

참고 문헌 (Ch36): https://dojang.io/mod/page/view.php?id=292

배열의 선언

(자료형) (배열이름)[크기] = {초기값};

1
2
3
4
int numArr[10] = {1,2,3,4,5,6,7,8,9,10}; //정수형의 값을 10개를 가지는 배열을 선언하고, 초기값을 {1,2,3,4,5,6,7,8,9,10}로 지정

int numArr2[] = {1,2,3,4,5,6,7,8,9,10}; // 크기를 선언하지 않음
// 정수형의 값을 가지는 배열인데, 초기값을 {1,2,3,4,5,6,7,8,9,10}로 지정하고, 크기도 선언한 초기값의 크기와 동일하게 지정

배열 원소 접근

(배열이름)[인덱스]

10개를 선언 => 배열의 인덱스는 0부터 9까지, 즉 첫번째 값이 0의 인덱스를 가짐


배열 원소를 0으로 초기화

(자료형) (배열이름)[크기] ={0,};

1
2
int numArr[10] = {0,};
//위와 같이 {0,}을 입력으로 주게 되면 선언한 배열의 모든 값이 0으로 바뀜

배열에 값 할당

(배열이름)[인덱스] = 값;


배열의 크기

sizeof((배열이름)) = 메모리 상에서 배열이 차지하는 전체 공간

sizeof((배열이름)) / sizeof((배열 선언에 이용한 자료형)) = 배열의 크기 (요소 개수)


반복문으로 배열 값 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열

// sizeof(numArr) / sizeof(int) : 배열 요소의 개수가 변해도 대응할 수 있도록
for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
//for (int i = sizeof(numArr) / sizeof(int) - 1; i >= 0; i--) // 요소 개수 - 1부터 역순으로 반복
{
printf("%d\n", numArr[i]); // 배열의 인덱스에 반복문의 변수 i를 지정
}

return 0;
}

배열 요소의 합계

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열
int sum = 0; // 합을 저장할 변수는 0으로 초기화 => 초기화를 안하면 처음에 쓰레기 값이 들어있기 때문에 정상적으로 합을 계산할 수 없음

for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
{
sum += numArr[i]; // sum과 배열의 요소를 더해서 다시 sum에 저장
}

printf("%d\n", sum); // 605

return 0;
}

배열 각 요소의 값을 두 배로

전체 요소에 대해서 접근하기 위해서 반복문을 무조건 돌긴 해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열

for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
{
numArr[i] *= 2; // 배열의 요소에 2를 곱해서 다시 요소에 저장
}

for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
{
printf("%d\n", numArr[i]);
}

return 0;
}

배열을 포인터에 넣기

배열을 선언할 때 쓰인 배열이름만 단독으로 사용하는 경우, 배열 첫번째 값의 주소값이 리턴된다. 즉 배열이름은 포인터의 역할을 한다고 볼 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열

int *numPtr = numArr; // 포인터에 int형 배열을 할당 (배열 이름 = 첫번째 원소의 주소값)

printf("%d\n", *numPtr); // 11: 배열의 주소가 들어있는 포인터를 역참조하면 배열의 첫 번째 요소에 접근

printf("%d\n", *numArr); // 11: 배열 자체를 역참조해도 배열의 첫 번째 요소에 접근

printf("%d\n", numPtr[5]); // 66: 배열의 주소가 들어있는 포인터는 인덱스로 접근할 수 있음

printf("%d\n", sizeof(numArr)); // 40: sizeof로 배열의 크기를 구하면 배열이 메모리에 차지하는 공간이 출력됨

printf("%d\n", sizeof(numPtr)); // 4 : sizeof로 배열의 주소가 들어있는 포인터의 크기를 구하면 포인터의 크기가 출력됨(64비트라면 8)

return 0;
}

배열을 이용해서 10진수를 2진수로 변환하기

10진수를 몫이 0이 될 때까지 2로 계속 나눈 다음 나머지를 역순으로 읽으면 2진수가 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>

int main()
{
int decimal = 13; // 2진수로 바꿀 값
int binary[20] = { 0, }; // 20비트의 이진수

int position = 0; // 2진수 값이 들어갈 위치
while (1)
{
binary[position] = decimal % 2; // 2로 나누었을 때 나머지를 배열에 저장
decimal = decimal / 2; // 2로 나눈 몫을 저장

position++; // 자릿수 변경

if (decimal == 0) // 몫이 0이 되면 반복을 끝냄
break;
}

// 배열의 요소를 역순으로 출력
for (int i = position - 1; i >= 0; i--)
{
printf("%d", binary[i]);
}

printf("\n");

return 0;
}

2020.01.09

오늘의 개발

C언어 공부를 마무리 지었다.

기초적인 배열부터 함수에서 배열을 주고 받는 부분까지 공부를 끝냈고, 이제 필요한 것들 조합해서 기능 구현하는 함수만 짜면 될 것 같다.

기능 구현하는 함수를 정리하는 과정을 진행해야하고, c언어 공부는 코딩도장에서 제공하는 자료를 기반으로 했다.

코딩도장 책을 사서도 봤었는데, 앞부분만 보다가 맨날 그만보고 결국 친구 동생한테 책을 넘겨줬는데, 이번에는 그 뒤에 필요한 모든 부분을 다 봤다.

생각보다 읽기 힘든 설명 문장들이 있어서 직접 돌려보고 이해한데로 설명을 작성하면서 공부했다.

오늘의 메모

vscode에서 C 개발 환경을 만들어놨는데, 인코딩 부분이 맞질 않아서 한글을 프린팅 했을 때 값이 다 깨져서 나온다. 이걸 해결하는 방법을 찾아보거나 그냥 영어만 쓰자

PythonCodeFight-Day4

Day_4

Q9. allLongestStrings

Given an array of strings, return another array containing all of its longest strings.

1
2
3
4
5
6
7
8
9
10
11
12
def allLongestStrings(inputArray):
maxLen = 0
for word in inputArray:
if maxLen < len(word):
maxLen = len(word)

maxLenList = list()
for word in inputArray:
if len(word) == maxLen:
maxLenList.append(word)

return maxLenList

오늘부턴 코드 짜는 과정도 메모해둘 수 있으면 메모해서 올리자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 문제 파악
# Given an array of strings, return another array containing all of its longest strings.

# Example

# For inputArray = ["aba", "aa", "ad", "vcd", "aba"], the output should be
# allLongestStrings(inputArray) = ["aba", "vcd", "aba"].

# 입출력 확인
# Input/Output

# [execution time limit] 4 seconds (py3)

# [input] array.string inputArray

# A non-empty array.

# Guaranteed constraints:
# 1 ≤ inputArray.length ≤ 10,
# 1 ≤ inputArray[i].length ≤ 10.

# [output] array.string

# Array of the longest strings, stored in the same order as in the inputArray.

# 개발 과정
inputArray = ["aba", "aa", "ad", "vcd", "aba"] # 제공된 입력 확인
print(inputArray)
print(inputArray[0])

# 최대 길이 구하기
maxLen = 0
for word in inputArray:
if maxLen < len(word):
maxLen = len(word)
print(maxLen)

# 최대 길이인 리스트 채워넣기
maxLenList = list()
for word in inputArray:
if len(word) == maxLen:
maxLenList.append(word)
print(maxLenList)

2020.01.08

오늘의 개발

오늘부터 C언어 공부를 본격적으로 시작했다. 공부한 것을 정리해서 올리는건 공부가 다 끝난다음에 한 번에 포스팅으로 올릴 예정이다.

오늘도 역시나 할 일들이 너무 많았고, 특히 축구를 너무 오랜만에 빡시게 뛰고나니 에너지가 다 떨어졌다.

하루하루 올리기에 급급한 것처럼 보이는 포스팅이지만 실제로 공부한걸 다 md 파일로 정리하고 있으니까 금방 올라갈 것이다~~!

오늘의 메모

vscode 관련해서, 컴파일 과정에서 에러가 발생할 수도 있는데, 나같은 경우 폴더의 경로가 띄어쓰기 포함에 한글 경로여서 문제가 생겼다.

이를 해결하려고 폴더를 띄어쓰기가 없고 영어 폴더트리를 가지는 경로로 옮기니까 바로 해결됐다!

2020.01.07

오늘의 개발

오늘은 회사 면접을 준비하느라 파이썬 코딩테스트 문제 하나 풀어본 것을 제외하고는 코딩을 하지 못했다.

그래도 면접도 잘 끝낸 것 같고, 내일부터 다시 폭풍 코딩을 진행해야겠다.

면접은 결과를 금방 알려준다고 해서 정말 다행이다. 그냥 빨리 알려줬으면 좋겠다!

PythonCodeFight-Day3

Day_3

Q8. matrixElementSum

After becoming famous, the CodeBots decided to move into a new building together. Each of the rooms has a different cost, and some of them are free, but there’s a rumour that all the free rooms are haunted! Since the CodeBots are quite superstitious, they refuse to stay in any of the free rooms, or any of the rooms below any of the free rooms.

Given matrix, a rectangular matrix of integers, where each value represents the cost of the room, your task is to return the total sum of all rooms that are suitable for the CodeBots (ie: add up all the values that don’t appear below a 0).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def matrixElementsSum(matrix):
# matrix = [[0, 1, 1, 2],
# [0, 5, 0, 0],
# [2, 0, 3, 3]]

for col in range(len(matrix[0])): # 열 검색
for row in range(len(matrix)): # 행 검색
if matrix[row][col] == 0: # 리스트에서 0의 인덱스 찾기
print("row: {} col: {} is zero".format(row,col)) # 0의 열 중 0의 행 아래로 다 0으로 처리
for remain in range(row,len(matrix),1):
matrix[remain][col] = 0

Temp_sum = list() # 전체 합 넣을 리스트
for row in range(len(matrix)):
Temp_sum.append(sum(matrix[row]))

return sum(Temp_sum)

2020.01.06

오늘의 개발

오늘도 역시나 개발을 안했다!
내일 있을 만도 면접 준비도 있고, 이번 방학부터 다음 달에 있을 산학 과제 최종 발표 회의, 그리고 월마다 제출하는 연구 내용을 작성했다.

또, 논문을 어떻게 쓸 지에 대한 아웃라인 고민도 하고, 1월달의 계획도 수립했다.

점심먹고 졸릴 때 파이썬 코드 파이트를 했는데, 한 문제는 굉장히 쉽게 풀려서 금방 해결했는데, 한 문제가 너무 풀리지 않아서 그냥 해설집을 봤다.

문제를 보는데 도저히 어떻게 구현해야할 지 생각이 안나서 시행착오로 해결할까 했는데, 그게 잘 안되서 그냥 답을 본 것이었다.

내일의 면접이 끝나면 개발해야할 일들이 산더미처럼 쌓여있기 때문에, 아마 수요일부터는 제대로 개발 일지가 올라가지 않을까 싶다!

PythonCodeFight-Day2

Day_2

Intro.

Q6. Make Array Consecutive 2

Ratiorg got statues of different sizes as a present from CodeMaster for his birthday, each statue having an non-negative integer size. Since he likes to make things perfect, he wants to arrange them from smallest to largest so that each statue will be bigger than the previous one exactly by 1. He may need some additional statues to be able to accomplish that. Help him figure out the minimum number of additional statues needed.

1
2
def makeArrayConsecutive2(statues):
return ((max(statues) - min(statues) +1) - len(statues))

Q7. almostIncreasingSequence

Given a sequence of integers as an array, determine whether it is possible to obtain a strictly increasing sequence by removing no more than one element from the array.

Note: sequence a0, a1, …, an is considered to be a strictly increasing if a0 < a1 < ... < an. Sequence containing only one element is also considered to be strictly increasing.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 못 풀겠어서 솔루션을 가져왔음 pharfenmeister의 솔루션
def almostIncreasingSequence(sequence):
droppped = False
last = prev = min(sequence) - 1
for elm in sequence:
if elm <= last:
if droppped:
return False
else:
droppped = True
if elm <= prev:
prev = last
elif elm >= prev:
prev = last = elm
else:
prev, last = last, elm
return True

못 푼 이유: 조건이 잘 그려지지 않음

고민한 시간: 1시간 고민

2020.01.05

오늘의 개발

오늘은 특별한 개발은 따로 하진 않았고, 파이썬 공부를 위해서 파이썬 코드 파이팅 하는 오픈채팅방에 들어간 것이 제일 큰 일이었다.

인트로라고 해서 쉽게 봤는데 생각보다 잘 안풀려서 꽤나 당황하면서 문제를 풀었다.

그리고 오픈채팅방의 규칙 상 블로그에 하루하루 문제 푼 것을 업로드 해야하는데, 그것 때문에 헥소 블로그 관련해서 이런저런 세팅을 만져봤다.

제공되는 테마를 이용해보려고 다운 받았는데, 중국 사람이 만든거라서 중국어가 묻어나오는데, 어디서 수정해야하는지 도저히 찾을 수가 없어서 그냥 기본 테마를 다시 쓰기로 했다.

또 헥소 블로그를 이런저런 곳에서 같이 쓰려고 온갖 방법을 해봤는데, 아직 깃허브와 이 블로그의 파일트리가 나한테 익숙하지 않은 일들이어서 그런지 지금은 도무지 못 할 것 같다.

그래서 그냥 드롭박스에 마크다운 폴더 하나 만들어서 블로그 포스팅할 내용들을 마크다운 파일로 만들어서 넣으려고 한다.

마크다운 파일만 있으면 집에 와서 데스크탑에 넣고, 생성하고 배포만 하면 되니까 꽤 괜찮은 대안을 찾은 것 같다.

내일부터 다시 조금씩 개발을 진행할 것이다!!