목록분류 전체보기 (110)
SYeonni Study Room

문제 설명 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. 제한 조건 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다. 입출력 예arr1arr2return [[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]] [[1],[2]] [[3],[4]] [[4],[6]]

문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다 시간복잡도 : O(n)

직사각형 별찍기 문제 설명 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수입니다. ---문제풀이--- 1. 나의 답 > 별찍기하면 대표적으로 이중for문으로 생각했다. 왜냐면 이중for문 연습을 별찍기로했으니까 근데 이게 시간복잡도를 얘기하면 달라진다. 이중for문은 O(N^2) 의 시간 복잡도를 가지게 된다. O(N^2) > 데이터가 많아질수록 처리시간이 급수적으로 늘어남 2. 시간복잡도를 고려한 답 string에 입력 후 1차원for문으로 출력시키게 되면 O(n) 의 시간복잡도를 가지게 되므로 이중for문보다 훨씬 빠르다. O(n) > 입력 데..

이전 두 프로그램을 비교하여 포인터 인수의 함수가 다음과 같은 포인터를 사용해야함을 알 수 있습니다. var v Vertex ScaleFunc(v, 5) // Compile error! ScaleFunc(&v, 5) // OK 포인터 리시버가 있는 메소드는 다음과 같이 호출될 때 값이나 포인터를 리시버로 받아들입니다. var v Vertex v.Scale(5) // OK p := &v p.Scale(10) // OK v 라는 문장의 경우, v.Scale(5) 는 v 가 포인터가 아니라 값인데도 포인터 리시버가 있는 메서드는 자동으로 호출됩니다. 즉, Scale 메서드가 포인터 리시버를 가졌기 때문에 편의상 Go는 v.Scale(5) 라는 것을 (&v).Scale(5) 로 해석합니다.

포인터 리시버로 메소드를 선언 할 수 있습니다. 이는 리시버 유형이 일부 유형 T 에 대한 리터럴 구문 *T 를 가짐을 의미합니다. (또한 T 자체는 *int 와 같은 포인터가 될 수 없습니다.) 예를 들어, 여기서 Scale 메소드는 *Vertex 에 정의되어 있습니다. 포인터 리시버가 있는 메소드는 Scale 처럼 리시버가 가리키는 값을 수정할 수 있습니다. 메소드는 종종 리시버를 수정해야하기에 포인터 리시버가 값 리시버보다 더 일반적입니다. 16 행의 Scale 함수 선언에서 * 를 제거하고 프로그램의 동작이 어떻게 변하는 지 관찰해보십시오. 값 수신기를 사용하면 Scale 메서드가 원래 Vertex 값의 복사본에서 작동합니다. (이것은 다른 함수 인수와 동일합니다.) Scale 메소드에는 main..

Go 함수들은 클로저일 수도 있습니다. 클로저는 함수의 외부로부터 오는 변수를 참조하는 함수 값입니다. 함수는 참조된 변수에 접근하여 할당될 수 있습니다. 이러한 의미에서 함수는 변수에 "bound(바운드)" 됩니다. 그 예로, adder 함수는 클로저를 반환합니다. 각 클로저는 그 자체의 sum 변수에 bound(바운드) 되어 있습니다.

맵의 모든 데이터를 출력해보겠습니다. 배열, 슬라이스와 마찬가지로 맵도 for 반복문에서 range 키워드를 사용합니다. range 키워드를 사용하면 반복문이 실행될 때 마다 맵의 키와 값이 자동으로 변수에 들어갑니다. range의 리턴값에서 키 변수를 사용하고 싶지 않다면 _ (밑줄 문자)를 사용합니다.

Go 언어는 기본 자료형으로 맵을 지원합니다. 맵은 해시 테이블, 딕셔너리라고도 하며 키-값 형태로 자료를 저장합니다. 또한, 슬라이스와 마찬가지로 레퍼런스 타입 var 맵명 map[키_자료형]값_자료형 var a map[string]int [ ] (대괄호)안에는 키의 자료형을 지정하고 그 뒤에 값의 자료형을 지정 맵의 zero value는 nil 입니다. nil 맵은 키도 없고, 키를 추가할 수도 없습니다. make 함수는 주어진 타입의 초기화되고 사용 준비가 된 맵을 반환합니다. 맵은 make 함수를 사용하여 공간을 할당해야 값을 넣을 수 있습니다. 여기서 맵 선언과 동시에 make 함수를 사용하면 map 키워드와 자료형을 생략할 수 있습니다. 또한, 일반 변수와 마찬가지로 :=를 사용하여 var를 ..

for 에서 range 는 슬라이스 또는 맵의 요소들을 순회합니다. 슬라이스에서 range 를 사용하면, 각 순회마다 두 개의 값이 반환됩니다. 첫 번째는 인덱스이고, 두 번째는 해당 인덱스 값의 복사본입니다. package main import "fmt" var pow = []int{1, 2, 4, 8, 16, 32, 64, 128} func main() { for i, v := range pow { fmt.Printf("2*%d = %d\n", i, v) } } Range continued _ 을 할당하여 인덱스 또는 값을 건너뛸 수 있습니다. for i, _ := range pow for _, value := range pow 만약 인덱스만을 원하면, 두 번째 변수를 생략할 수 있습니다. for i..

슬라이스는 내장된 make 함수로 생성할 수 있습니다. 이것은 동적 크기의 배열을 생성하는 방법입니다. make 함수는 0으로 이루어진 배열을 할당합니다. 그리고 해당 배열을 참조하는 슬라이스를 반환합니다 용량을 지정하려면, make 함수의 세 번째 인자에 값을 전달하면 됩니다. package main import "fmt" func main() { a := make([]int, 5) printSlice("a", a) b := make([]int, 0, 5) printSlice("b", b) c := b[:2] printSlice("c", c) d := c[2:5] printSlice("d", d) } func printSlice(s string, x []int) { fmt.Printf("%s len=%..