본문 바로가기

2학년 2학기213

2024.11.07 - ch5관련 문제(기말고사 다수 출제 예정 특히, 1번 2번) 1. 기본 컴퓨터에서 AC에는 16진수로 ABCD가 들어 있고, 초기에 PC의 값은031이며, E는 1이다. 다음의 명령어가 수행된 후 AC, E, PC, AR, IR 각각의 내용은 무엇인가?(a) CLA, (b) CMA   오른쪽 위 표는 T에 따라 진행되는 타이밍도를 그린것이다. T₀에서는 PC(명령어 주소)를 AR(유효 주소)에 저장한다. T₁에서는 메모리에서 유효주소에 있는 명령어를 IR(명령어 저장 레지스터)에 저장 + 현재 PC(명령어 주소)를 다음 PC(명령어 주소)로 변경한다. T₂에서는 IR에 저장된 명령어를 기준으로 최상위 bit에 있는 값을 I에 저장하고 0에서 11번째 bit의 값을 AR에 저장한다.T₃에서는 메모리의 피연산자 주소가 있는 곳의 값을 AR에 저장한다. (간접 주소 지.. 2024. 11. 7.
.dt를 사용하는 이유 우선 dt의 사용이유를 알기 전에 to_datetime()의 입력 데이터 형태에 따라 반환되는 타입이 뭔지 알아야 한다. 그리고 그 반환 타입에 따라 .dt 사용여부를 확인해보자. to_datetime() - 입력데이터 타입에 따른 반환 타입1. 단일 String 입력반환 타입: Timestamp[코드]date = pd.to_datetime('2023-01-01')print(type(date)) #  .dt 사용 안함!   2. list 또는 array 입력반환 타입: DatetimeIndex[코드]dates = pd.to_datetime(['2023-01-01', '2023-02-01', '2023-03-01'])print(type(dates)) #  .dt 사용 안함!   3. series / d.. 2024. 11. 7.
10주차 - 실습 str 속성을 이용해서 address에서 도시와 구를 추출했다. 도시는 앞에서 2글자만 추출해서 뒤에 시를 붙였다. 구는 split()을 통해서 각 행의 첫번째 요소를 구로 설정했다.        1. 우선 date열의 타입을 to_datetime를 활용해서 datetime 타입으로 변경한다. 2. 명시적 인덱싱을 이용하기 위해서 타입을 변경한 date 열을 인덱스로 설정한다. 3. 1번은 슬라이싱, 2번은 인덱싱을 했다. 4. 중요한건 3번과 4번인데 timestamp(시점)를 만들고 timedelta(특정 기간)을 만들어서 더해준다. 특정 기간은 Hour기준, Day 기준, Week 기준, Year 기준 등을 토대로 만들수 있다.      이 부분은 .dt.strftime(지시자) 형식으로 컬럼을 생.. 2024. 11. 7.
이미지 올리기 app - res - drawble에 복사 붙여넣기 후 팝업창 ok 2024. 11. 6.
dp와 sp의 차이 Jetpack Compose에서 dp와 sp는 화면 요소의 크기를 정의할 때 사용하는 단위이지만, 각기 다른 목적을 가지고 있음.  dp (Density-independent Pixels)dp는 "밀도 독립적 픽셀"을 의미함. 기기의 화면 밀도에 따라 크기가 조정되어 다양한 화면 크기와 해상도에서 일관된 크기를 유지하도록 돕는 단위임. 일반적으로 버튼, 여백, 높이, 너비 등 레이아웃의 크기를 지정할 때 사용됨. sp (Scale-independent Pixels)sp는 "스케일 독립적 픽셀"을 의미하며, 주로 텍스트 크기를 정의할 때 사용됨. sp는 dp와 유사하게 밀도에 따라 조정되지만, 사용자가 설정한 글꼴 크기에 따라 추가 조정이 됨. 따라서 접근성 측면에서 글꼴 크기를 키우거나 줄이는 설정을 지.. 2024. 11. 6.
Modifier 1. Modifier: Compoent(예를 들면 Row, Column, Box, Text, Button, Image 등등)의 모양이나 동작을 설정한다. Modifier의 역할레이아웃 조정: Modifier는 Composable의 크기, 여백, 패딩을 설정할 수 있다.그래픽 효과: 배경색 설정, 그림자 추가 등 그래픽 효과를 추가할 수 있다.이벤트 처리: 클릭이나 드래그 등의 사용자 입력 이벤트를 처리할 수 있다.애니메이션 효과: 애니메이션 효과를 적용하거나 특정 동작에 애니메이션을 추가할 수 있다. 2. padding: padding의 속성에서는 start(왼), end(오), top(위), bottom(아래), horizontal(좌우), vertical(상하)이 있다.3. then(): 하나의 UI.. 2024. 11. 6.
값 전달과 상태 호이스팅의 차이 값 전달과 상태 호이스팅(State Hoisting)은 컴포넌트 간의 상태 관리를 다루는 두 가지 방식입니다. 두 개념은 비슷해 보일 수 있지만, 실제로는 상태 변경 권한을 누가 가지느냐에 큰 차이가 있습니다. 하나씩 설명하겠습니다.1. 값 전달 (Value Passing)값 전달은 단순히 상위 컴포넌트에서 값만 자식 컴포넌트로 전달하는 방식입니다.이 방식에서는 자식 컴포넌트가 전달받은 값을 변경할 권한이 없으며, 전달받은 값은 읽기 전용으로 사용됩니다.값 전달은 자식 컴포넌트가 상태를 변경할 필요가 없고, 상위 컴포넌트에서 일방적으로 값만 표시하고자 할 때 유용합니다.예시@Composablefun ParentComponent() { val message = "Hello, Compose!" C.. 2024. 11. 6.
Arrangement와 Alignment 1. Arrangement: Arrangment는 중심축을 의미한다. 즉, Row(Column)내부에 있는 Component를 중심축 기준으로 정렬한다.Row의 중심축은 가로축 이므로 horizontalArrangement Column의 중심축은 세로축 이므로 verticalArrangement  [Row에서의 Arragement. 즉, horizontalArrangement]    [Column에서의 Arragement. 즉, verticalArrangement]     2. Alignment: Alignment는 중심축의 반대축을 의미한다. 즉, Row(Column)내부에 있는 Component를 중심축의 반대축 기준으로 정렬한다.  기본적으로 verticalAlignment의 기본값은 위쪽 정렬이고.. 2024. 11. 6.
state hoisting - slider를 통한 폰트 조절 앱 만들기 state hoisting 이란?기본적으로 State는 개별 Component에서 유지된다. 그러나 다른 Componet(예를 들면 자식 Component)에서도 같은 State 값이 필요하다면, 해당 State를 상위(부모) Component에서 공유할 수 있고, 상태의 일관성을 유지할 수 있다. 쉽게 말해서, 상위 Component에서 하위 Component에게 값을 전달하고 하위 Component에서 값을 변경하면 상위 Component에서도 값 변경이 일어나고, 화면 렌더링도 일어난다. 따라서, 변경된 값이 자동으로 적용된다.  해결 방법 1: MutableState으로 상태를 전달: 상태 객체를 직접 전달해서, 자식 Componet가 부모 Componet의 state를 직접 접근하고 관리할 수 .. 2024. 11. 5.
state란? - counter button 만들기 1. state란?state는 UI요소의 현재 상태를 나타내는 데이터이다. 일반적으로 state는 UI요소의 일시적인 상태를 저장하는 데 사용되며, 상태가 변경되면 해당 상태에 의존하는 UI가 자동으로 재구성된다. state를 선언하는 방식에는 총 2가지 방식이 있다. 1. MutableState 변수 방식: MutableState는 값이 변경될 수 있는 상태를 나타내며, mutableStateOf를 사용하여 상태를 초기화할 수 있다. 이 방식은 MutableState 객체를 직접 참조하므로 .value 속성을 통해 값을 읽고 쓰게 된다.val count: MutableState = remember { mutableStateOf(0) } 2. by위임 속성을 이용한 간단한 선언 방식by 위임 속성을 이용.. 2024. 11. 5.
[pandas] 고성능 Pandas: Eval & Query 넘파이와 판다스는 기본적으로 Vectorized를 지원하기 때문에 빠른 연산을 지원한다. 다만, 위의 사진과 같은 복합적인 연산이 존재하는 경우, 실제 동작은 연산 하나하나를 메모리에 할당한 후에 저장을 한다. 따라서, x와 y의 크기가 큰 경우 메모리를 많이 차치하여 오히려 연산이 더 느려질 수 있다. ❓그럼 어떻게 해야할까?연산을 한 번에 해주는 것이 아니라 부분적으로 나눠서 해줘야한다. 따라서 넘파이와 판다스에서는 큰 데이터에서도 효율적인 연산이 가능하도록 eval, query 함수를 제공한다. 1. eval 메소드의 사용[pandas.eval(문자열)형태로 사용]: 실행하고 싶은 연산을 문자열로 표현해서 사용할 수 있다. 결과 = pd.eval('연산') 이렇게 eval 메소드를 이용해도 동일한 .. 2024. 11. 5.
[pandas] 날짜 / 시간 데이터 다루기(Time stamp, Time interval, Time duration) ❓ 날짜/시간과 관련된 자료형이란?: 절대적인 시간(2024년 11월 2일 등)을 다룰 수 있는 자료형이다. 내부적인 동작에는 실수 혹은 정수형으로 동작한다 . 판다스에서 날짜/시간과 관련된 자료형에는 3가지가 있다.  1. Time stamp: 특정 시점(시각)을 나타낸다. 예를 들면 2024년 11월 2일 11시 32분 23초를 나타는 것과 같다. 2. Time interval(period): 시작과 종료 시점 사이의 구간을 나타낸다. 예를 들면 2015년(2015년 1월 1일 ~ 2015년 12월 31일까지), 2021년 8월 첫째 주(2021년 8월 1일  ~ 2021년 8월 7일)를 나타내는 것과 같다. 3. Time delta(duration): 두 시간 간격의 차이를 나타내며, 일정한 시간의.. 2024. 11. 5.
[pandas] 문자열 Vectorized 연산 기본적으로 Numpy와 pandas에서는 아래와 같은 Vectorized 연산을 지원한다. 이러한 Vectorized 연산을 문자열(String)에서도 적용하기 위해 str 속성을 지원하게된다. str 속성을 이용해서 Vectorized 연산을 하면 None, Null에 대한 경우도 오류를 발생시키지 않고 무시하고 처리하게 된다.    str에서는 아래와 같은 모든 Python 문자열 내장 메소드를 동일하게 지원한다.   1. "str" 속성을 이용한 문자열의 Vectorized 연산   2. 인덱싱monte.str.split()[0]  이렇게 스플릿을 한 것에서 인덱싱을 하면 columns에서 인덱스가 0인 것이 아니오는 것이 아니라 row에서 인덱스가 0인 것이 나오게 된다.    monte.str... 2024. 11. 5.
10-7장 문자(열) 처리 라이브러리(암기는 필요 없으나, 뭐하는 함수인지는 알아야함) 문자 처리 라이브러리 함수  #include ctype.h>함수설명isalpha(c)c가 영문자인가?(a-z, A-Z)isupper(c)c가 대문자인가?(A-Z)islower(c)c가 소문자인가?(a-z)isdigit(c)c가 숫자인가?(0-9)isalnum(c)c가 영문자이나 숫자인가?(a-z, A-Z, 0-9)isxdigit(c)c가 16진수의 숫자인가?(0-9, A-F, a-f)isspace(c)c가 공백문자인가?(‘ ’, ‘\n', '\t', '\v', '\r')ispunct(c)c가 구두점 문자인가?isprint(c)C가 출력가능한 문자인가?iscntrl(c)c가 제어 문자인가?isascii(c)c가 아스키 코드인가?toupper(c)c를 대문자로 바꾼다.tolower(c)c를 소문자로 바꾼다... 2024. 11. 5.
10-6장 문자열의 배열 문자열의 배열을 이용해서 각 문자열의 문자들은 행이 되고, 문자열 들의 개수는 열이된다. char 문자열 명[문자열 개수][문자열 중 최대 문자의 길이 + 1] = { "" , "" , "", ... }char s[3][6] = { "init", "open", "close"};    반복문을 통해서 문자열의 배열(2차원 배열) 출력하기#include int main() { int i, j; char menu[5][10] = { "init", "open", "close", "read", "write" }; for (i = 0; i    이렇게 각 행의 길이를 매번 최대 길이 + 1을 계산해서 정해주기란 불편하다. 따라서 C에서는 각 행의 길.. 2024. 11. 5.
10-5장 문자열과 포인터 문자열 배열에 문자열  char s[] = "HelloWorld";//요소 변경 가능 Os[1] = 'E'; // HElloWorld//할당 연산자 사용 불가능 Xs = "HelloWorld_2"; //오류 위의 코드처럼 요소는 변경 가능하지만 할당 연산자로 문자열 자체를 변경하는 건 안된다.  포인터에 문자열: 문장이 변하지 않음이 보장되는 경우에 사용한다.  char* p = "HelloWorld";//할당 연산자 사용 가능 Op = "HelloWorld_2"; // HelloWorld_2//요소 변경 불가능 Xp[1] = 'E'; //오류위의 코드처럼 할당 연산자로 문자열이 가리키는 주소의 값(즉, 문자열 자체)은 변경할 수 있지만, 문자를 변경하는건 안된다. 2024. 11. 5.
윈폼 블로그 https://andjjip.tistory.com/category/%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B3%BC%EC%A0%95%EC%A4%80%EB%B9%84/WinForm 2024. 11. 4.
10-4장 문자열을 수치로 변환 atoi(문자열): 특정 숫자 형태의 문자열을 정수로 변경해주는 것  sscanf(문자열, "%d", 정수형 변수) ⭐️⭐️⭐️: 특정 숫자 형태의 문자열을 정수형 변수에 저장해주는것  sprintf(문자열 변수, "%d", 정수) ⭐️⭐️⭐️: 특정 숫자를 문자열 변수에 저장해주는 것  #include #include int main(){ char s[] = "100"; char t[100] = ""; int i; printf("%d\n", atoi("100")); sscanf(s, "%d", &i); //문자열을 정수로 변경해서 저장 sprintf(t, "%d", 102); //정수를 문자열로 변경해서 저장 printf("i: %d\n", i); //i: 100 .. 2024. 11. 4.
10-3장 문자열 처리 라이브러리 strlen(s): 문자열의 길이#include #include int main(){ char s[] = "abcdefgh"; int len = strlen(s); printf("문자열 %s의 길이 = %d", s, len); //문자열 abcdefgh의 길이 = 8} strcpy(s1, s2): 문자열을 복사#include #include int main(){ char src[] = "Hello"; char dst[6]; strcpy(dst, src); printf("복사된 문자열 = %s", dst); //복사된 문자열 = Hello}  strcat(s1, s2): 문자열을 연결#include #include int main(){ char s[11.. 2024. 11. 4.
10-2장 문자 입출력과 문자열 입출력 1. 문자 입출력[getchar()와 getch()]getchar(): 입력된 문자들이 buffer에 쌓이다가, enter 키가 입력되면 buffer에 저장되어 있던 문자들이 선입선출형식으로 하나씩 출력된다. getch(): 입력된 문자들이 바로바로 출력된다.  [putchar()와 putch()]putchar(): 출력 버퍼를 사용하여 여러 문자를 모았다가 한번에 문자들을 출력한다.putch(): 버퍼 없이 바로바로 출력한다.    2. 문자열 입출력[scanf()와 gets_s()]scanf(): 문자열을 읽어서 배열 s[]에 저장한다. 단! space, tab, newline과 같은 입력을 구분하는 문자들은 입력되지 않는다.gets(문자열, 문자열 길이): 문자열을 읽어서 배열 s[]에 저장한다. .. 2024. 11. 4.
10-1장 문자열과 NULL 문자 1. 문자열 표현 방법#includeint main(){ char str[6] = "Hello"; //동일한 기능 - char str[6] = {'H', 'e', 'l', 'l', 'o'};}   각 배열은 문자가 각각 입력되지만 아스키 코드로도 확인할 수 있다.#includeint main(){ char str[6] = "Hello"; printf("%c", str[0]); // 'H' printf("%d", str[0]); // 72}  2. NULL 문자: 문자열이 끝나기 전에 반드시 NULL 문자(\0)라는 특수한 값으로 끝나야한다. 문자열의 크기가 5개라도 NULL문자를 생각해서 크기를 6개로 설정해야한다.  char str[6] = "Hello";  ❓ 왜 N.. 2024. 11. 4.
9주차 - split, apply, pivot table을 이용해서 실습해보기 초반에는 모든 사전 자료형을 열거해서 데이터 프레임을 만들었지만, 사전자료형의 하나의 키에 여러 값을 리스트로 추가해서 데이터 프레임을 만드면 추후 행을 추가할 때 각 리스트의 요소들만 추가하면 되기 때문에 아래의 방식이 더 개선된 방식이다.  9.1은 split을 통해 구분된 데이터들을 기반으로 apply로 연산을 하는 것이 주요 포인트이다.    내가 한 방식은 특정 열의 행 값에 따라서 값을 부여해주었다.  하지만, 교수님은 Product로 행을 만들어주고 groupby(category_mapping)에서 category_mapping을 전달하면 pandas는 인덱스의 각 값에 대해 category_mapping 딕셔너리를 참조하여 자동으로 새로운 카테고리 값으로 매핑을 수행합니다. 따라서 그렇게 .. 2024. 10. 31.
Scaffold vs Surface의 차이 우리가 이전에 MainActivity.kt에서 onCreate()메서드에 Scaffold를 봤을 것이다. 이 Scaffold외에 Surface도 있다.  Scaffold: 전체화면의 주요 UI 컴포넌트를 배치할 수 있는 프레임워크를 제공하여 앱의 구조를 쉽게 설정할 수 있다. 주로, 앱의 메인 레이아웃을 설정할 때 사용된다.  예를 들어 상단 bar, 하단 navigation bar, floating action button을 포함한 화면을 구성할 때 유용하다.   위의 형태로 topBar, bottomBar, flaotingActionButton, Content 등을 구성할 수 있다.   Surface: 개별 UI 컴포넌트의 스타일과 배경을 설정하는데 사용되는 기본 구성요소이다. 주로 카드, 버튼, 박.. 2024. 10. 30.
Compose 기초 기본적으로 프로젝트를 생성하고 MainActivity.kt를 열어보면 위와 같은 파일 형태가 나온다.  "onCreate() {}": 애뮬레이터의 화면 레이아웃을 담당한다. (여기서 아무리 코드를 바꿔도 Preview에서는 반영되지 않는다.)  "@Composablefunc Greeting(...) { }": View의 구성을 담당한다.  "@Preview(...)@Composablefunc GreetingPreview() {...}": Preview 화면의 레이아웃을 담당한다. (여기서 아무리 바꿔도 실제 애뮬레이터에서는 반영되지 않는다.)  "onCreate메소드" override fun onCreate(savedInstanceState: Bundle?) { //시뮬레이터 용 super.onCr.. 2024. 10. 30.
[pandas] Pivot Tables Pivot Tables: 특정 행과 열을 기준으로 우리가 원하는 연산을 하는 것이다. 자세하게 말하면, 데이터를 요약하고 집계하기 위해 특정 행과 열을 기준으로 그룹화해서 다양한 연산(합, 평균, 개수)을 수행하는 테이블이다. 데이터 프레임 명.pivot_table(연산할 컬럼, index=기준이 되는 행, columns=기준이 되는 열)  이렇게 pivot table을 이용하면, 간단하게 행과 열을 기준으로 특정 값에 대한 연산을 할 수 있다. pivot table의 기본 연산은 mean이기 때문에 아무 코드 추가 없이도 생존자 여부의 평균을 계산할 수 있다.  각각에 다른 연산 적용 또한 같은 기준에 각각의 값에 다른 연산을 적용할 수도 있다.  정한 기준에 대한 전체에 대한 연산 적용 이렇게 ma.. 2024. 10. 29.
[pandas] GroupBy: Apply 이전에 배웠던 기준에 따라 선택된 데이터들끼리 연산하는 것이 Apply이다.   Aggregation: sum, median, max, min 같이 값들을 하나로 요약하는 과정이다.   이런 식으로 aggregate와 함께 연산을 써주면, key로 분류된 데이터들 각각에 min, medianm, max 연산을 해주고 그 결과를 보여준다. 이렇게 모든 열(data1, data2)에 같은 연산을 한번에 할 수도 있지만, 각 열에 다른 연산도 가능하다.  이렇게 data1에는 min연산을하고, data2에는 max연산을 해줄 수도 있다.     Filter: 그룹을 기준으로 특정 조건에 맞는 데이터만 남기는 과정이다. 예들 들면 그룹 별 평균이 특정 값 이상인 데이터만 남기는 것 왜 groupby된 데이터 .. 2024. 10. 29.
[pandas] GroupBy: Split ❓ Split이란?: 데이터 중 내가 원하는 기준에 있는 일부 데이터를 선택하는 것이다.      기존 값을 기준으로 split이런 식의 데이터가 있을 때, key를 기준으로 split을 한다면 아래와 같이 같은 키를 가진 행끼리 나누어 진다.keydataA0A3 keydataB1B4 keydataC2C5    사용자가 정의한 값을 기준으로 split기존에는 열중 하나의 값으로 겹치는 행끼리 split을 했다. 하지만 사용자가 직접 정의한 값을 기준으로 split을 할 수 있다. 위의 데이터가 있을 때 직접 정의한 L을 기준으로 값을 나눌 수 있다.  0은 0끼리, 1은 1끼리, 2는 2끼리 나눌 수 있다. [0인 것들]keydata1data2A05C23C59[1인 것들]keydata1data2B10A3.. 2024. 10. 29.
9-7장 이중 포인터 이중 포인터: 포인터를 가르키는 포인터이다. 즉, 주소를 갖고 있는 메모리의 주소를 갖고있는 메모리를 의미한다.  #includeint main(){ int a = 3; int* p = &a; int** pp = &p; printf("%d\n", *p); //3 printf("%d\n", **pp); //3 } 이처럼 pp가 이중 포인터이다. a의 주소를 담고 있는 p의 주소를 담고 있는 pp이다. 따라서, 간접 참조 연산자를 2개 써줘야하는데, **pp는 pp의 값을 접근하고, 다시 그 값은 주소이니깐 그 주소의 값을 접근하는 형태이다.  [예제]#includeint globlal_value = 30;void call_by_value(int* val){ //매개변수가 포.. 2024. 10. 29.
9-6장 함수 포인터 함수 포인터: 함수 포인터란, 함수를 가르키는 포인터이다. 즉 함수의 주소를 가질 수 있다. [형식]반환형 (* 함수 포인터 이름)(매개 변수1, 매개 변수2, ...);//예시int (*pf)(int, int); 함수 포인터는 따로 body가 필요하지 않다.또한 배열처럼 함수 이름 자체가 주소이기 때문에 주소 연산(&)는 필요하지 않다.  [예시 - 1]#includevoid A(){ printf("A입니다.");}void B(){ printf("B입니다.");}void C(){ printf("C입니다.");}int main(){ int x = 0; void(*p)(); printf("함수 명을 선택하시오. (A: 0, B: 1, C: 0): "); scanf("%.. 2024. 10. 29.
9-5장 함수가 포인터를 반환하는 경우 함수가 포인터를 반환하는 경우: 함수 종료시에도 남아 있는 변수의 주소를 반환해야한다. 만일 지역 변수의 주소를 반환한다면 함수가 종료되면 소멸되므로, 오류가 발생할 수 있다. [지역 변수]#include//결과를 result 저장하고 그 주소를 반환int* add(int x, int y){ int result; result = x + y; return &result;}int main(){ int* p = add(3, 4); printf("%d", *p); //오류 발생}  [전역 변수]#include//결과를 result 저장하고 그 주소를 반환int result;int* add(int x, int y){ result = x + y; return &result;}i.. 2024. 10. 29.