cheese_jelly_의 등록된 링크

키자드에 등록된 총 211개의 포스트를 확인하실 수 있습니다.

Naver Blog

[c언어][버블정렬]

#include<stdio.h> void main() { int data[10] = { 90,78,100,30,55,24,52,70,12,95 }; //숫자정의 bubble(data); //버블함수 호출 for (int a = 0; a < 10; a++) { printf("%d\n", data[a]); } } int bubble(int a[10]) { int i, k; int empty; for(i = 0; i < 10; i++) { for (k = 0; k < 9-i; k++) { //여기다가 i를 넣어두면 횟수를 줄일수있다 if (a[k] > a[k + 1]) { empty=a[k + 1]; a[k + 1] = a[k]; a[k] = empty; } } } }

Naver Blog

[c언어][원형Queue]

#include<stdio.h> #include<stdlib.h> #define SIZE 6 struct Queue { int data[SIZE]; int front; int rear; }; //값을 넣는 함수 int Enqueue(struct Queue* q, int data) { static int full = 0; //초기상태 if ((q->rear + 1) % SIZE == q->front&&full == 1) //포화상태 검출하는 부분 { return 0; } q->data[q->rear] = data; //값을 넣는다 q->rear = (q->rear + 1) % SIZE; //남는부분계산가능 full = 0; if ((q->rear + 1) % SIZE == q->front) {//rear의 위치와 front의 위치가 같을때의 예외처리 full = 1; } return 1; } //값을 빼내는 함수부분 int Dequeue(struct Queue* q, int* data

Naver Blog

[c언어][Baby Gin]

#include<stdio.h> #pragma warning(disable:4996) void main() { int n[7], temp; for (int i = 0; i < 6; i++) { printf("숫자를 입력하세요: "); scanf("%d", &n[i]); }//숫자 입력 for (int i = 0; i < 6; i++) { for (int j = 0; (j + i) < 6; j++) { if (n[j] > n[j + 1]) { temp = n[j]; n[j] = n[j + 1]; n[j + 1] = temp; } } } for (int i = 1; i < 7; i++) printf("%d\t", n[i]);//정렬 if (n[1] == n[2]&&n[2]== n[3]) { if (n[4] + 1 == n[5] && n[5] + 1 == n[6]) printf("Baby gin"); else if (n[4] == n[5] && n[5] == n[6]) printf("Ba

Naver Blog

[c언어][팩토리얼]

#include<stdio.h> int main() { int i, n,result=1; printf("몇번째 팩토리얼을 보시겟습니까"); scanf("%d", &n); for (i = 0;n>i;n--) { result = result*n; } printf("%d", result); }

Naver Blog

[c언어][포인터 링크리스트]

#include <stdio.h> struct stu { int data; struct stu *next; //next는 다음 노드를 가르킨다. }; void main() { /* 1. head =>list의 첫번째 노드를 가르키는 포인터이름 head는 첫번째를 삭제하거나 추가할때 빼고는 움직이지 않는다. head= 이라는 코딩은 하지않기 head를 움직이는 코딩이니까 2. newnode => 새로운 노드를 가르키는 포인터 3. del => 삭제할때 사용하는 포인터 4. cur => 모든 잡일을 담당하는 포인터 */ struct stu a, b, c; struct stu *head, *newnode, *del, *cur; a.data = 5; b.data = 7; c.data = 10; head =cur= &a; cur->next = &b;// a.next = &b; cur->next->next = &c; //b.next=&c; cur->next->next->next = NULL;

Naver Blog

[메모리할당 성적처리프로그래밍][malloc을 사용]

#include <stdio.h> #include<stdlib.h> struct student { char name[10]; int kor, eng, mat,total; float avg; }; //메모리할당함수 struct student*myalloc(int *num) { return malloc(sizeof(int)*(*num)); } //입력함수 void myinput(struct student *stu,int num) { int i; for (i = 0; i < num; i++) { printf("이름을 입력하시오"); scanf("%s", (stu + i)->name); printf("점수를 입력하시오"); scanf(" %d", &(stu + i)->kor); scanf("%d", &(stu + i)->eng); scanf("%d", &(stu + i)->mat); (stu + i)->total = (stu + i)->kor + (stu + i)->eng + (stu +

Naver Blog

[c언어][포인터를 사용한 출력]

#include <stdio.h> int main(void) { int a=3; int b[4] = { 4,3,2,1 }; int c[2][2] = {4,3,2,1}; int d[2][2][2] = {8,7,6,5,4,3,2,1}; int*p = &a; int*p_a = &a; int *p_b = b; int(*p_c)[2] = c; int(*p_d)[2][2] = d; int**pp = &p; printf("%d\n", a); printf("%d %d %d %d\n", *p_b, p_b[1], p_b[2], p_b[3]); printf("%d %d %d %d\n", p_c[0][0], p_c[0][1], p_c[1][0], p_c[1][1]); printf("%d %d %d %d %d %d %d %d\n", (*p_d)[0][0], (*p_d)[0][1], *(p_d)[0][1], (*p_d)[1][1], *(p_d)[1][0],p_d[1][0][1],*(p_d)[1][1],p_d

Naver Blog

[java를 사용한 로또]

import java.util.Random; import java.util.Scanner; public class Lotto { public static void main(String[]args){ int []lotto=new int[7]; Random random=new Random(); //int random=(int)(Math.random()*45); int i,j; Scanner sc=new Scanner(System.in); System.out.println("몇번을 돌릴꺼니"); for(i=0;i<7;i++){ lotto[i]=random.nextInt(44)+1; for(j=0;j<6;j++){ if(lotto[j]==lotto[j+1]){ j--; break; }} for(j=1;j<7;j++){ if(lotto[j]==lotto[j-1]){ j++; break; } } System.out.print(" "); System.out.print(lotto[i]); } }

Naver Blog

[java를 사용한 1인성적처리]

package Java.sun.busan; import java.util.Scanner; public class Test { public String []name; public int [][]score; public int result; public int j=0,i=0; public float[] avg; public Test(){ score=new int[3][4]; avg=new float [3]; name=new String[3]; } public void stu_name(String name1){ name[j]=name1; } public void score_kor(int num){ score[i][0]=num; } public void score_mat(int num){ score[i][1]=num; } public void score_eng(int num){ score[i][2]=num; } public int sum(){ score[i][3]=score[i][0]+sc

Naver Blog

[java를 사용한 3인성적처리]

import java.util.Scanner; public class CalStudent { public static void main(String[]ar){ char [][]name; name=new char[3][10]; int[][]score; score=new int[3][4]; float []avg; avg=new float[3]; Scanner sc=new Scanner(System.in); for (int i = 0; i < 3; i++) { System.out.println("학생의 이름을 입력하시오 :"); name[i][0]=sc.next().charAt(0); for (int j = 0; j < 3; j++) { System.out.println("점수입력:"); score[i][j]=sc.nextInt(); } score[i][3]=score[i][0]+score[i][1]+score[i][2]; avg[i]=score[i][3]/ 3.f; } System.ou

Naver Blog

[c언어][구조체포인터함수]

#include <stdio.h> void input(struct student *p); void output(struct student *p); struct student //구조체 선언 { char name[10]; int score[4]; float avg; };//aa; //전역변수 int main(void) { const char score[6][10] = { "Name","Kor","Eng","Mat","Total","Avg" }; struct student aa[3] = { 0 }; struct student *p = aa; input(aa); output(aa); } void input(struct student *p) { int j,i; for (i = 0; i < 3; i++) { scanf("%s", (p + i)->name); for (j = 0; j < 3; j++) { scanf("%d", (p + i)->score + j); (p + i)->score[3]

Naver Blog

[c언어][구조체포인터성적]

#include <stdio.h> struct student //구조체 선언 { char name[10]; int score[4]; float avg; };//aa; //전역변수 int main(void) { struct student aa; //지역변수 struct student *p; int i; p = &aa; (*p).score[3] = 0; scanf("%s", (*p).name); //name 해도 문제 없음 배열명은 그 배열의 시작주소를 의미 for (i = 0; i < 3; i++) { scanf(" %d", (*p).score+i); (*p).score[3] += (*p).score[i]; } /* scanf(" %d %d %d", &aa.score[0], &aa.score[1], &aa.score[2]); aa.score[3] = aa.score[0] + aa.score[1] + aa.score[2]; */(*p).avg = (*p).score[3] / 3.f; p

Naver Blog

[c언어][2차원배열]

#include<stdio.h> #include<string.h> int input(char(*name)[10], int(*score)[4]); int ex(int(*score)[4], float *avg); int output(char(*name)[10], int(*score)[4], float *avg); int main() { /*int a = 1; int b = 2; int c = 3; int i; int *p[3]; //={&a,&b,&c} p[0] = &a; p[1] = &b; p[2] = &c; for (i = 0; i < 3; i++) printf("%d\t", *p[i]); */ char name[3][10]; int score[3][4] = { 0 }; float avg[3]; input(name, score); ex(score, avg); output(name, score, avg); } int input(char (*name)[10], int (*score)[4

Naver Blog

[c언어][포인터3명성적]

#include<stdio.h> #include<string.h> void input(char *name,int *score); void ex(int *score, float *avg); void output(char *name, int *score, float *avg); int main() { char name[3][10]; int score[3][4] = { 0 }; float avg[3]; input(*name, *score); ex(*score, avg); output(*name, *score, avg); } void input(char *name, int *score) { int i,j; for (i = 0; i < 3; i++) { printf("이름을 입력하시오:"); scanf("%s", name + i * 10); for (j = 0; j < 3; j++) { printf("성적을 입력하시오:"); scanf(" %d", score + j); } } } void e

Naver Blog

[c언어][배열성적표]

#include <stdio.h> #include <string.h> int main() { char name[3][10]; int score[3][4] = { 0 }; float avg[3]; int i, j; for (i = 0; i < 3; i++) { printf("이름을 입력하시오: "); scanf("%s", &name[i][0]); //printf("성적을 입력하시오 (국,영,수) :"); //scanf(" %d %d %d", &score[i][0],&score[i][1],&score[i][2]); printf("성적을 입력하시오 (국,영,수) :"); for (j = 0; j < 3; j++) { scanf(" %d", &score[i][j]); } } printf("이름 국어 수학 영어 합계 평균\n"); for (i = 0; i < 3; i++) { score[i][3] = score[i][0] + score[i][1] + score[i][2]; //합계 avg[i

Naver Blog

[c언어][strcmp함수]

#include<stdio.h> int main(){ char buf1[10] = "superman"; char buf2[10]; int ans,i; scanf(" %s", buf2); for (i = 0; buf1[i] != '\0'; i++) { if (buf1[i] != buf2[i]) { printf("안같다"); break; } else { printf("같다"); break; } } }

Naver Blog

[c언어][별찍기]

#include <stdio.h> //1번 문제 int main(void) { int i,n;//i는 가로 n은 세로 for (n = 0; n < 3; n++) { for (i = 0; i < 4; i++) { printf("*"); } printf("\n"); //띄울려고 } return 0; } #include <stdio.h> //2번 문제 int main(void) { int i, n; //i는 세로 n은 가로 for (i = 1; i < 4; i++) { {for (n = 1; n <= i; n++) printf("*"); } printf("\n"); } return 0; } int main(void) //3번문제 { int x, y; //x는 가로 y는 세로 for (x = 1; x < 4; x++) { for (y = 0; y <3 - x; y++) //빈공간이 맨처음에는 두칸인데 두번돌릴려면 0과1이면 되니까 저렇게뺀다 나중에 한개씩 줄여서 하려면 어처피 x가 커지니까

Naver Blog

[c언어][구구단]

#include <stdio.h> int main(void) { int i, n,result; //i는 뒷쪽 n 은 앞쪽 for (i = 1; i <= 9; i++) { for (n = 2; n <= 9; n++) { result = i*n; printf("%d*%d=%d\t", n, i, result); } printf("\n"); } return 0; }

Naver Blog

[c언어][성적프로그램]

/*성적프로그램 한사람성적프로그램 입력:이름, 국,영,수 연산: 총점, 평균 출력:이름,국,영,수,총,평*/ #include <stdio.h> void main() { char name; int score[4];//국 영 수 총 float avg; printf("이름을 입력하시오"); scanf("%c", &name); printf("국어 영어 수학 점수를 입력하시오"); scanf("%d %d %d", &score[0], &score[1], &score[2]); score[3] = score[0] + score[1] + score[2]; avg = score[3] / 3; printf("이름:%c\n", name); printf("국어점수, 수학점수, 영어점수:%d %d %d\n", score[0], score[1], score[2]); printf("총점:%d\n", score[3]); printf("평균:%f\n", avg); return 0; }

Naver Blog

[c언어][이진트리 삭제알고리즘]

삭제할 노드가 단말노드(leaf node)인 경우 -그냥 그 노드만 지우면 된다. 삭제할 노드가 하나의 자식노드를 갖는경우 -그 노드를 지우고 자식을 부모로 올려주면 된다. -자식이 오른쪽에 있건 왼쪽에 있건 상관이 없다. 삭제할 노드가 두개의 자식노드를 갖는경우 -왼쪽에서 가장 큰값을 가진 노드를 그 자리로 옮긴다. -오른쪽에서 가장 작은 값을 가진 노드를 그자리로 옮긴다.

Naver Blog

[c언어][삽입정렬]

#include<stdio.h> #include<stdlib.h> #include <time.h> void InsertionSort(int data[], int size); int RandNum(int flagChange); void main(void) { int data[1000]; for (int i = 0; i < 1000; i++) { data[i] = RandNum(1); } InsertionSort(data, 1000); for (int i = 0; i <= 998; i++) { //printf("%d ", data[i]); if (data[i] > data[i + 1]) puts("Err"); } } int RandNum(int flagChange) { if (flagChange == 1) { static int flag = 0; if (flag == 0) { flag = 1; srand((unsigned int)time(0)); } } return rand(); } /

Naver Blog

[c언어][더블링크]

#include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) struct stu { int data; struct stu *next; struct stu *prev; }; // 동적메모리할당함수 선언 // 추가, 삭제, 검색기능 구현. // 1. 추가 ( 노드의 마지막에 무조건 추가 ) + 처음 실행시 추가할수없다. ( 최소 1개이상 노드가 있을경우만 동작 ) // 2. 삽입 ( 위치 선정해서 노드 추가 ) + 예외처리 // 3. 검색 ( 커서가 검색해서 커서를 이용해서 출력 ) + 예외처리 // 4. 삭제 ( 선택 삭제 + 전체 삭제 ) + 예외처리 // 5. 출력 ( 전체 출력 ) void myalloc(struct stu **newnode); // 메모리 할당함수 void append(struct stu *head, int *count); // 마지막 노드 추가함수 void insert(struct stu **head,

Naver Blog

[c언어][링크드리스크모듈화]

#include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) struct stu { int data; struct stu *next; }; // 동적메모리할당함수 선언 // 추가, 삭제, 검색기능 구현. // 1. 추가 ( 노드의 마지막에 무조건 추가 ) + 처음 실행시 추가할수없다. ( 최소 1개이상 노드가 있을경우만 동작 ) // 2. 삽입 ( 위치 선정해서 노드 추가 ) + 예외처리 // 3. 검색 ( 커서가 검색해서 커서를 이용해서 출력 ) + 예외처리 // 4. 삭제 ( 선택 삭제 + 전체 삭제 ) + 예외처리 // 5. 출력 ( 전체 출력 ) void myalloc(struct stu **newnode); // 메모리 할당함수 void append(struct stu *head, int *count); // 마지막 노드 추가함수 void insert(struct stu **head, int *count); // 선

Naver Blog

[c언어][싱글링크드리스트]

#include<stdio.h> #include<stdlib.h> #pragma warning(disable:4996) struct stu { int data; struct stu *next; }; void main() { struct stu *head, *cur, *del, *newnode; int num; head = cur = del = newnode = (struct stu*)malloc(sizeof(struct stu)); cur->data = 1; cur->next = NULL; cur ->next = (struct stu*)malloc(sizeof(struct stu)); cur->next->data = 2; cur->next ->next = NULL; cur->next->next = (struct stu*)malloc(sizeof(struct stu)); cur->next->next->data = 3; cur->next->next->next = NULL; while (

Naver Blog

[c언어][구조체 링크드리스트]

#include <stdio.h> struct stu { int data; struct stu *next; //next는 다음 노드를 가르킨다. }; void main() { /* 1. head =>list의 첫번째 노드를 가르키는 포인터이름 head는 첫번째를 삭제하거나 추가할때 빼고는 움직이지 않는다. head= 이라는 코딩은 하지않기 head를 움직이는 코딩이니까 2. newnode => 새로운 노드를 가르키는 포인터 3. del => 삭제할때 사용하는 포인터 4. cur => 모든 잡일을 담당하는 포인터 */ struct stu a, b, c,d,e; struct stu *head, *newnode, *del, *cur; int num; a.data = 1; b.data = 2; c.data = 3; d.data = 4; e.data = 5; head =cur= &a; cur->next = &b; // a.next = &b; cur->next->next = &c; //b.ne

Naver Blog

[c언어][동적메모리할당 malloc]

#include<stdio.h> #include <stdlib.h> void main() { char *p_char; int *p_int; float *p_float; //동적메모리할당 p_char = (char*)malloc(sizeof(char)); p_int = (int*)malloc(sizeof(int)); p_float = (float*)malloc(sizeof(float)); *p_char = 'A'; *p_int = 300; *p_float = 4.7f; printf("%c %d %f\n", *p_char, *p_int, *p_float); //메모리해제 free(p_char); free(p_int); free(p_float); }

Naver Blog

[c언어][성적처리함수모듈]

#include<stdio.h> #pragma warning(disable:4996) #include <string.h> void input(struct student *p); void erase(struct student *p);//수정 void search_name(struct student *p); void search_score(struct student *p); void remove_name(struct student *p); void output(struct student *p); struct student //구조체 선언 { char name[10]; int score[4]; float avg; }; int main() { struct student aa[30] = { 0 }; struct student *p = &aa; int i; int num; do { printf("****MENU****\n1.입력\n2.수정\n3.이름검색\n4.점수검색\n5.삭제\n6.출력\n*

Naver Blog

[c언어][계산기모듈화]

#include <stdio.h> int input(int *num1, char *op, int *num2); int ex(int num1, char op, int num2, int *reslnt); int ans(); int main() { int num1, num2; char op, ans; int reslnt; float resFloat; do { input(&num1, &op, &num2); ex(num1, op, num2, &reslnt); printf("계속:(y/n):"); scanf("%c", &ans); } while (ans == 'y' || ans == 'Y'); } int input(int *num1,char *op,int *num2) { printf("값을 입력하시오"); scanf(" %d,%c,%d", num1,op,num2); } int ex(int num1, char op, int num2, int *reslnt) { switch (op) { case

Naver Blog

[c언어][계산기 메인에때려박은거]

#include <stdio.h> #pragma warning(disable:4996) int main(void) { float a, b; char push, op; do { printf("입력하시오: "); scanf("%f %c %f", &a, &op, &b); switch (op) { case '+': printf("결과값: %f\n", a + b); break; case '-': printf("결과값: %f\n", a - b); break; case '/': printf("결과값: %f\n", a / b); break; case '*': printf("결과값: %f\n", a*b); break; default: break; } printf("계속하려면 y/Y를 누르시오\n"); //fflush(stdin); //이게 엔터를 scanf가 차지하는걸 막아주는 기능을 한다 //scanf("%c",&push); //c는 두번 반복하는거 싫어하니까 다른방법이 또 잇음 바로위에꺼 //s

Naver Blog

[c언어][숫자갯수세기]

#include<stdio.h> int main() { int sum; int num; int check = -1; int temp; while (check < 9) { check = check + 1; num = 0; sum = 0; while (num < 1000) { num = num + 1; temp = num; while (temp != 0) { if (temp % 10 == check) sum = sum + 1; temp = temp / 10; } } printf("%d: %d\n", check, sum); } }

Naver Blog

[java][5*5행렬 덧셈과 곱셈]

public class Sauce { public static void main(String[]args){ int score[][]={{1,2,3,4,5},{6,7,8,9,0},{0,9,8,7,6},{5,4,3,2,1},{1,2,3,4,5}}; int score2[][]={{3,4,5,6,7},{2,1,0,9,8},{7,6,5,4,3},{8,9,0,1,2},{8,7,6,5,4}}; //덧셈 int [][]add; add=new int[5][5]; for(int i=0;i<score.length;i++){ for(int j = 0;j<score[i].length;j++){ add[i][j]=score[i][j]+score2[i][j]; System.out.print(add[i][j]+" "); } System.out.println(); } System.out.println(); //곱셈 int [][]mul=new int[5][5]; for(int i=0;i<5;i++){ for(i

Naver Blog

[java][Hashtable를 사용한 전화번호부]

import java.util.*; import java.io.*; public class PhoneBook { private Hashtable<String, String> phoneBook; public PhoneBook(){ this.phoneBook = new Hashtable<String, String>(); } public void add(String name, String number){ if (this.phoneBook.containsKey(name) ){ System.out.println("이름"+ name +"이 전화번호부에 있습니다."); } else{ this.phoneBook.put(name,number); System.out.println("이름"+ name +"을 전화번호부에 추가하였습니다."); } } public void find(String name){ if(this.phoneBook.containsKey(name)){ String number=this

Naver Blog

[c언어]오일러의 수 구하기

#include <stdio.h> double factorial(double n); int main() { int i,j; double x,k=1; printf("어디까지 계산할까요.:"); scanf("%d",&i); for (j = 1; j <= i; j++) { x =1/factorial(j); k = k + x; } printf("오일러의 수는 %lf 입니다.",k); return 0; } double factorial(double n) { double i, j; j = 1; for (i = 1; i <= n; i++) { j = j*i; } return j; }

Naver Blog

[c언어][부동 소수점 근사값 구하기]

#include <stdio.h> #define e_min 0.000001 int f_equal(double a, double b); double absolute(double a); double min(double a, double b); int main(void) { double a, b; printf("값을 입력해라 두개"); scanf("%lf %lf", &a, &b); if (f_equal(a, b) == 0) printf("다르다"); else printf("유사하다"); } int f_equal(double a, double b) { double d, f, a1, b1; d = absolute(a - b); a1 = absolute(a); b1 = absolute(b); f = min(a1, b1); if (d / f < e_min) return 1; else return 0; } double absolute(double a) { if (a > 0) return a; el

Naver Blog

[c언어][윤년 구하기]

#include <stdio.h> int is_leap(int year); int main(void) //1년이 몇일인지 구하는 프로그램 { int year, result, z; printf("연도를 입력하시오 :"); scanf("%d", &year); result = is_leap( year); printf("%d년은 %d일입니다.", year, result); } int is_leap(int year) { if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) return 366; else return 365; }

Naver Blog

[c언어][전화번호부][포인터]malloc사용

#include <stdio.h> #include <string.h> #define CAPACITY 100 #define BUFFER_SIZE 20 char *names[CAPACITY]; char *numbers[CAPACITY]; int n = 0; void add(); void find(); void status(); void remove_entry(); void save(); void read(); void main() { char command[BUFFER_SIZE]; while (1) { printf("$ "); scanf_s("%s", command, sizeof(command)); if (strcmp(command, "add") == 0) add(); else if (strcmp(command, "find") == 0) find(); else if (strcmp(command, "status") == 0) status(); else if (strcmp(command,

Naver Blog

[c언어][배열활용][주사위]

#include <stdio.h> #include <stdlib.h> #include <time.h> int get_dice_face(); int main() { srand((unsigned)time(NULL)); for(int i=0;i<1000;i++) { get_dice_face(); } } int get_dice_face() { static int y = 0; static int dice[5] = { 0, }; int x=0; x = rand() % 6; if (x == 0) dice[0]++; else if (x == 1) dice[1]++; else if (x == 2) dice[2]++; else if (x == 3) dice[3]++; else if (x == 4) dice[4]++; else if (x == 5) dice[5]++; y++; if (y!=0&&y % 100 == 0) printf("%d %d %d %d %d %d \n", dice[0], dice[1]

Naver Blog

[c언어][순환 호출 사용]

#include <stdio.h> void show_digit(int n); int main() { int x, y; printf("정수를 입력하시오"); scanf("%d", &x); show_digit(x); } void show_digit(int n) { if (n == 0) return; show_digit(n / 10); printf("%d ", n % 10); }

Naver Blog

[c언어][포인터 매개 변수]

#pragma warning(disable:4996) #include <stdio.h> void get_sum_diff(int x, int y, int *p_sum, int *p_diff); int main() { int x, y, sum, diff; printf("인수를 입력하시오"); scanf("%d %d", &x, &y); get_sum_diff(x, y, &sum, &diff); printf("x + y = %d", sum); printf("x - y = %d", diff); } void get_sum_diff(int x, int y, int *p_sum, int *p_diff) { int diff, sum; diff = x - y; sum = x + y; *p_sum = sum; *p_diff = diff; }

Naver Blog

[c언어][점수 변환]

#pragma warning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <time.h> #define STUDENT 10 void convert(double *grades, double *scores, int size); int main() { double grades[STUDENT] = { 0, }; double scores[STUDENT] = { 0, }; float x,y; int i; for (i = 0; i < STUDENT; i++) { srand((unsigned)time(NULL)); convert(grades, scores, STUDENT); printf("%f\n", scores[i]); } } void convert(double *grades, double *scores, int size) { int i; double stu_score,stu_grade; for (i = 0; i < size; i

Naver Blog

[c언어][길이가 같은지 판단]

#include <stdio.h> struct point { int x, y; }; int equal(struct point p1, struct point p2) { if ((p1.x == p2.x) && (p1.y == p2.y)) return 1; else return 0; } int quadrant(struct point p) { if (p.x > 0 && p.y > 0) return 1; else if (p.x > 0 && p.y < 0) return 4; else if (p.x < 0 && p.y>0) return 2; else if (p.x < 0 && p.y < 0) return 3; else return 0; } int main() { int z, r; struct point p1; struct point p2; struct point p; printf("x and y 값을 넣어라"); scanf("%d %d", &p1.x, &p1.y); printf("x and y

Naver Blog

[c언어][파일입출력][파일 내용일치]

#include <stdio.h> #include <string.h> int main() { int x, y,result; char buffer1[256],buffer2[256]; char f_name[100], f2_name[100]; FILE *fp1; FILE *fp2; scanf("%s", f_name); scanf("%s", f2_name); printf("첫번째 파일 이름:%s\n", f_name); printf("두번째 파일 이름:%s\n", f2_name); if ((fp1 = fopen(f_name, "r")) == NULL) { fprintf(stderr, "Can not find file"); } if((fp2 = fopen(f2_name, "r")) == NULL){ fprintf(stderr, "Can not find file"); } while (fgets(buffer1, 256, fp1) != NULL) { fgets(buffer2, 256, fp2); r

Naver Blog

[c언어][파일 입출력][학생성적을 평균으로 바꾸기]

#include <stdio.h> struct stu { char name[30]; int kor, math, eng; float avg; }; int main() { struct stu s; char buffer[256]; float result; FILE *fp1; FILE *fp2; if ((fp1 = fopen("student.txt", "r")) == NULL) { fprintf(stderr, "Can not find file"); } if ((fp2 = fopen("student_avg.txt", "w")) == NULL) { fprintf(stderr, "Can not find file"); } printf("이름 국어 수학 영어"); while (!feof(fp1)) { fscanf(fp1, "%s %d %d %d", s.name, &s.kor, &s.math, &s.eng); result = s.kor + s.math + s.eng; s.avg = result/3;

Naver Blog

[c언어][전처리 및 비트필드][#ifdef 하기]

#include <stdio.h> #define DEBUG 2 #define LINE 3 double power_a(int x, int y) { double result = 1.0; int i; for (i = 0; i < y; i++) { #ifdef DEBUG printf("result=%f\n", result); #endif result *= x; } return result; } double power_b(int x, int y) { double result = 1.0; int i; for (i = 0; i < y; i++) { #if DEBUG==2 printf("result=%f\n", result); #endif result *= x; } return result; } double power_c(int x, int y) { double result = 1.0; int i; for (i = 0; i < y; i++) { #if (DEBUG==2 && LEVEL==3) pr

Naver Blog

[c언어][점의 좌표가 어디에 위치하는지 알아내는 함수]

#include <stdio.h> struct point { int x, y; }; int equal(struct point p1, struct point p2) { if ((p1.x == p2.x) && (p1.y == p2.y)) return 1; else return 0; } int quadrant(struct point p) { if (p.x > 0 && p.y > 0) return 1; else if (p.x > 0 && p.y < 0) return 4; else if (p.x < 0 && p.y>0) return 2; else if (p.x < 0 && p.y < 0) return 3; else return 0; } int main() { int z, r; struct point p1; struct point p2; struct point p; printf("x and y 값을 넣어라"); scanf("%d %d", &p1.x, &p1.y); printf("x and y

Naver Blog

[c언어][구조체의 포인터를 받아서 점이 어디에 위치하는지]

#include <stdio.h> struct point { int x, y; }; int equal(struct point *p1, struct point *p2) { if (((*p1).x == (*p2).x) && ((*p1).y == (*p2).y)) return 1; else return 0; } int quadrant(struct point *p) { if ((*p).x > 0 && (*p).y > 0) return 1; else if ((*p).x > 0 && (*p).y < 0) return 4; else if ((*p).x < 0 && (*p).y>0) return 2; else if ((*p).x < 0 && (*p).y < 0) return 3; else return 0; } int main() { int z, r; struct point *pp1; struct point *pp2; struct point *pp; struct point p1; struct poi

Naver Blog

[c언어][사각형 함수][쉽게풀어쓴c언어 express]

#include <stdio.h> struct point { int x, y; }; struct rectangle { struct point a, b; //a는 오른쪽 상단 b 는 왼쪽 하단 }; int area(struct rectangle r) { //a의 x값이랑 b의 x값이랑 빼서 가로길이 찾기 int low, high,result; low = r.a.x - r.b.x; high = r.a.y - r.b.y; result = low*high; return result; } int parimeter(struct rectangle r) { int low, high, result; low = r.a.x - r.b.x; high = r.a.y - r.b.y; result = 2 * (low + high); if (result > 0) return result; else return -result; } int is_square(struct rectangle r) { int low, h

Naver Blog

정보처리기사 필기 독학 공부방법, 합격후기(+공부 시간, 노트)

#정보처리기사 #큐넷 #자격증 안녕하세요. 코드만 올리다 처음으로 이런 정보글을 작성해 보네요! 제 글을 보시는 분들 중 it계열 전공자가 아니시더라도 무관하게 제 글을 참고하셔도 좋을듯 합니다. 우선 제목과 같이 정보처리기사 필기 공부법에 관하여 작성하려합니다. 일단 제 상태는 이러합니다. 1. it계열 전공자(4학년) 2. 필기 과목중 '운영체제'만 학습이 되어있는 상태 3. 코드는 쉽게 해석 + 이해 가능 2019년도 까지의 정보처리기사 필기시험은 총 5과목으로 이루어져있습니다. 시험 시간은 2시간 30분입니다. 1. 데이터베이스 2. 전자계산기구조 3. 운영체제 4. 소프트웨어공학 5. 데이터통신 저는 이 다섯가지 중에서 3번 운영체제만 학습이 되어있어서 시험공부를 어떻게 해야할지 너무 막막했습니다. 일단은 다들 전공자면 2주면 충분하다는 글 많이들 보셨으리라 생각합니다. 하지만, 5과목중에서 어느 과목도 40점 이하인 과락이 나오면 안되며, 평균은 60을 넘어야합니다. 공부

Naver Blog

[python] 파일 확장자 변경

#파이썬 #파일확장자 #변경 안녕하세요. .tar를 windows에서 압축을 풀어보니 txt파일에 확장자가 없더라구요. 그래서 코드를 찾다가 python 파일의 확장자를 변경하는 방법을 찾아서 여러분에게 도움이 되고자 포스팅해요. import glob import os.path fpath = 'C:\\Users\\*' files = glob.glob(fpath) for x in files: os.rename(x, x + '.txt') 위의 코드 fpath에 변경하고자 하는 파일들이 담긴 위치를 복사해서 넣어주시고, 뒤에 *을 붙이면 해당 위치에 있는 모든 파일에 대해서 확장자를 변경해줍니다. 만약에 특정 확장자를 변경하고 싶다면 import glob import os.path fpath = 'C:\\Users\\*.txt' //특정확장자(txt)원하시는 것으로 변경하면 돼요 files = glob.glob(fpath) for x in files: if not os.path.isdir

Naver Blog

[python] 텍스트 파일 인코딩 변환

#파일인코딩 #python #유니코드 #텍스트파일 안녕하세요. 오늘은 텍스트 파일 인코딩을 변환하는 방법을 가지고 왔습니다. import os fpath = 'C:\\Users\\' //input file이 들어있는 곳으로 wpath = 'C:\\Users\\' //write file이 작성될 곳으로 flist = os.listdir(fpath) for x in flist: input_name = fpath + x input = open(input_name, "r", encoding="utf-8") //encoding type은 원하시는 대로 변경해주세요 chunk = input.read() output_name = wpath + x output = open(output_name, "w", encoding="ANSI") //여기도 마찬가지입니다. output.write(chunk) 저는 utf-8 파일을 ANSI로 변환을 예제로 들었는데요. encoding에 들어갈 타입은 여러분이

Naver Blog

[python] 특정 위치 문자 제거

#파이썬 #python #문자열 #문자제거 오늘은 python 에서 특정한 위치의 문자를 제거하는 방법에 대해서 알려드리겠습니다. replace는 왼쪽에서 오른쪽으로 작동하는 함수인데요. 만약 오른쪽에 있는 하나만 제거하고 싶다면 replace보다는 다른 방법을 추천하고 싶습니다. x = 'Hello World' print(x) //Hello World y = x[:4] + x[5:] //문자열 슬라이싱 print(y) //Hell World 위와 같이 사용하시면 됩니다. 하지만 내가 지우고자 하는 문자열이 어디에 위치했는지 모른다면 index함수를 사용해주세요. x = 'Hello World' num = x.index('o') //찾고자 하는 문자열 넣기 y = x[:num] + x[num+1:] print(y) //Hell World 위와 같이 출력됨을 알 수 있습니다.

Naver Blog

[tensorflow 2.] tensorflow 설치 및 nvidia-driver 설치

#머신러닝 #tensorflow #텐서플로 안녕하세요. tensorflow설치와 nvidia-driver설치에 관해 포스팅 할게요. 하단의 url을 들어가셔서 본인의 환경에 맞게 터미널에 입력하시면 됩니다. https://www.tensorflow.org/install/gpu?hl=ko GPU 지원 | TensorFlow TensorFlow 설치 GPU 지원 목차 Pip 패키지 이전 버전의 TensorFlow 하드웨어 요구사항 소프트웨어 요구사항 TensorFlow GPU 지원에는 다양한 드라이버와 라이브러리가 필요합니다. 설치를 단순화하고 라이브러리 충돌을 방지하려면 GPU를 지원하는 TensorFlow Docker 이미지 를 사용하는 것이 좋습니다(Linux만 해당). 이 설정에는 NVIDIA GPU 드라이버 만 있으면 됩니다. 아래의 설치 명령어는 최신 버전의 TensorFlow에 적용됩니다. 이전 TensorFlow 출시에 사용할 CUDA ... www.tensorflow.o

Naver Blog

[numpy] axis = -1 이란?

#numpy #python #tensorflow numpy를 잘 사용하기 위해서는 축(axis)에 대한 개념이 필요하다. 축은 잘 알겠으나 axis = -1은 어디인가?라는 질문에 대한 대답은 다음과 같다. '해당 np.array의 마지막 축을 의미한다.' 예를 들어, (13,62,80,300)의 shape을 가진다고 치면, axis = 0 의 값은 13 axis = 1 의 값은 62 axis = 2 의 값은 80 axis = 3 의 값은 300 이를 반대로 표현하면, axis = -1 의 값은 300 axis = -2 의 값은 80 axis = -3 의 값은 62 axis = -4 의 값은 13 위와 같이 표현할 수 있다.

Naver Blog

[python] 한글 인코딩 byte 변환 (encode, decode)

#python #한글인코딩 #encode #decode #이진 안녕하세요 오늘은 python으로 한글의 인코딩 타입을 byte로 변환하는 방법을 가지고 왔습니다. encode() 함수와 decode() 함수를 통해 변환할 수 있습니다. encode() 함수는 글자를 byte로 바꿔주고, decode() 함수는 byte를 글자로 바꿔줍니다. a = '가' a = a.encode('euc-kr') print(a) # b'\xb0\xa1' a = a.decode('euc-kr') print(a) # '가' a = '가' a = a.encode('utf-8') print(a) # b'\xea\xb0\x80' a = a.decode('utf-8') print(a) # '가' 한글 인코딩에 관련해서 더 많은 설명은 아래 링크에서 확인해주세요. 한글코드 (ks완성형, cp949, utf-8) 인코딩 & 디코딩 hyejinwon.github.io

Naver Blog

[git] git으로 백업하기

#github #git #백업 안녕하세요. git으로 백업하는 방법에 대해 작성해보려 합니다. 우선 git의 로그인을 하시고, 'New repository'를 눌러주세요 그 다음에는 레포지토리에 원하시는 이름을 넣으셔서 생성하시면 됩니다. 그리고, 여러분이 백업하고 싶은 자료가 담긴 컴퓨터에서 터미널을 여세요. $ git init # .git이라는 폴더가 생성됩니다. $ git add %%% # 백업하고 싶은 자료인 %%%를 git에 넣어주세요 $ git status # 현재 어떤 자료가 .git에 올라갔는지 보여줍니다. $ git commit -m 'first commit' # 커밋을 하고, 메세지는 first commit으로 보냈습니다. $ git remote add origin @@@ #위의 주소와 같은 형식을 @@@에 넣어주세요 $ git remote -v # 잘 올라갔는지 확인해봅시다. $ git push -u origin master # 에러가 안생겼다면 제대로 잘 올라간

Naver Blog

[git] reset error

#github #git 안녕하세요 git에 자료를 push하려는 도중 에러가 발생하면 commit을 취소하여 해당 파일을 빼고 다시 commit하면 됩니다. 그때 사용되는게 'reset'인데요. 저는 파일의 사이즈가 커서 에러가 발생했습니다. 이렇게요! 이를 해결하기 위해서 둘 중 하나를 터미널에 작성하시면 됩니다. 가장 마지막에 커밋한 것을 제거하는 명령어 입니다. $ git reset HEAD^ $ git reset HEAD~1 하지만 저처럼 'fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.' 위의 에러가 발생한다면 이 해결방법이 큰 도움이 됐습니다. 이와 같이 터미널에 작성해주시고, 다시 커밋 -> add -> push 해주시면 깃에 제대로 올라가는 것을 확인할 수 있습니다. 해당 글에서 명령어에 대한 설명이 자세히 나와있으니 참고하시면 좋겠습니다. Git repository

Naver Blog

[ubuntu] 우분투 ssd mount 하기

#우분투 #ssd #mount 안녕하세요 우분투에서 ssd 장착한뒤 시스템에서 mount하는 방법 알려드리겠습니다. 일단 제 우분투 환경은 '16.04 LTS' 입니다. # 디스크의 상태 확인 sudo fdisk -l /dev/nvme0n1 이 새로 mount할 하드입니다. 현재 디스크의 상태 확인 sudo fdisk /dev/nvme0n1 #을 치시고 아래와 같이 순서대로 눌러주세요 (n, p, w) 새로 mount한 디스크를 초기화 합니다. /dev/nvme0n1p1 의 uuid와 type을 복사하시고 그전에 마운트를 할 폴더를 하나 생성하세요. mkdir @마운트할 폴더@ 아래와 같이 빔을 열어서 복사하신 정보를 넣어주시면 되요 sudo vim /etc/fstab 저는 'UUID=eb3758e1-849c-4f47-8003-fe6cd5c2ec37 마운트할 폴더 ext4 errors=remount-ro 0 1'로 작성했습니다. sudo mount -a df -h 제대로 따라오셨다면

Naver Blog

[python] ModuleNotFoundError: No module named 'numpy.random._pickle' 에러 해결

#gensim #numpy #python #error 안녕하세요 오늘은 python에서 나타나는 에러 해결법을 들고왔습니다. 'ModuleNotFoundError: No module named 'numpy.random._pickle'' 에러인데요. 이 에러의 발생원인은 간단했습니다. 바로 numpy의 version이 안맞았기 때문입니다. 저의 경우에는 서버에서 돌린 word2vec.bin 파일을 로컬 컴퓨터로 데리고 와서 돌리려고 할때 나타났습니다. 한번 확인해 보니, 서버의 numpy version 은 1.18.1 인 반면에 로컬 컴퓨터의 버전은 1.16.5 였습니다. 그래서 numpy version을 1.18.1로 변경하고나니 잘 돌아갔습니다! # numpy install pip3 install numpy # 최신버전 설치 pip3 install numpy==1.18.1 # 1.18.1로 설치 감사합니다.

Naver Blog

[ubuntu] 마운트한 하드 권한 얻기 및 사용하기

#ubuntu #mount #하드마운트 #우분투 #사용권한 #우분투마운트 #ssd마운트 안녕하세요 저번에 마운트한 하드를 사용하려고 보니 사용권한이 없어서 안되더라구요 이 문제를 해결하는 방법은 명령어 몇개만 치시면 됩니다. 일단 마운트 하신 폴더로 들어갑니다. $ cd <마운트하신 폴더명> $ sudo chown 계정이름:계정이름 . $ cd ../ $ chmod +w ./마운트하신 폴더명/ 아래와 같던 접근권한이 다음과 같이 변하게 되면서 쓰기 권한이 생겼습니다 ㅎㅎ

Naver Blog

[git] private <--> public 변경하는 방법

#git #깃허브 #깃허브공개설정 안녕하세요 요즘 git을 사용하고 있는데 천천히 찾아가면서 알아가고 있습니다. 비공개로해서 repo를 만들어놨는데 공개로 변경하고 싶으신 경우에 해결방안 알려드리겠습니다. 우선 깃허브에 들어가시고, 변경하고싶은 repo에 들어갑니다. 'settings' -> 쭉 스크롤 내리기 -> 'Danger Zone' -> 'Change repository visibility' -> 'Change visibility' -> 원하시는 방법 누르기 -> 하단의 타이핑 치기 -> 확인 버튼 이렇게 하시면 변경하실 수 있어요!

Naver Blog

[python] dictionary add

#python #dictionary #add 안녕하세요 오늘은 python dictionary 딕셔너리 값을 추가하는 방법 알려드리겠습니다. sample = dict() # dictionary add sample['apple'] = 1 print(sample) #결과 : {'apple':1} 딕셔너리에 값을 추가하는 방법은 다음과 같이 추가하시면 됩니다. 혹시 조건문을 주어서 딕셔너리를 업데이트 하고싶으시다면 sentence = 'abac' #예문 sample = dict() for i in sentence: if sample[i] in dict: sample[i] += 1 else: sample[i] == 1 다음과 같은 방법으로 사용하시면 되겠습니다~

Naver Blog

[python] Counter 값 변경

#python #Counter #value #change 안녕하세요 파이썬에서 counter를 사용하다보면 counter의 value값을 변경하고 싶으실 때가 있으실겁니다. 저역시 위와 같은 이유로 코드를 찾다가 만들어봤습니다. from collections import Counter s = '1234' Counter(s) #결과:Counter({'1': 1, '2': 1, '3': 1, '4': 1}) 기존의 카운터는 위와 같이 사용합니다. 딕셔너리형으로 만들어서 겉에 카운터를 씌우면 카운터형으로 변환이 됩니다. 이렇게 되면 counter에서 most_common을 사용할 수있더라구요! temp = dict() for i in Counter(s): if i == '1': temp[i] = 10 else: temp[i] = 1 Counter(temp) #결과:Counter({'1': 10, '2': 1, '3': 1, '4': 1}) 감사합니다.

Naver Blog

[windows] windows cmd에서 파일 라인 카운트

#windows #cmd #linux #wc 안녕하세요 오늘은 windows환경에서 파일 라인을 카운트하는 방법 알려드리겠습니다. 리눅스에서 파일 라인을 카운트 할때는 아래와 같이 사용합니다. $ wc -l FILE_NAME 윈도우 command에서 파일 라인을 카운트 할때는 아래와 같이 사용합니다. $ type FILE_NAME | find /v /c "" 감사합니다.

Naver Blog

[python] os.system 을 통해 파이썬에서 .exe 파일 실행

#python #os.system #exe 안녕하세요 오늘은 파이썬에서 .exe파일을 실행시키는 방법 알려드리겠습니다. import os os.system(FILE_NAME) 다음과 같이 실행시키면 파이썬 환경에서 exe파일을 실행시킬 수 있습니다.

Naver Blog

[python] 외부 파일 읽기 및 파일 이름 변경

#python #os #system #파일읽기 #파일이름변경 안녕하세요 오늘은 python에서 외부 파일 읽는 방법과 파일 이름 변경하는 법 알려드리겠습니다. import os file_list = os.listdir(PATH) #result : ['xaa', 'xab', 'xac'] 이번엔 파일 이름 변경하는 방법입니다. file_change = [os.rename(PATH+file, PATH+file+'.txt') for file in file_list] #result : ['xaa.txt', 'xab.txt', 'xac.txt'] os.rename함수를 통해서 변경할 수 있습니다. 감사합니다.

Naver Blog

[python] os.system exe파일 yes or no 입력하기

#python #os.system #file #input 안녕하세요 오늘은 python 에서 exe파일을 읽는데, 여기에 input으로 yes or no를 입력하는 방법 알려드리겠습니다. 이 부분은 리눅스 terminal이나 윈도우 cmd에서도 쓸수 있습니다!! 기존 cmd나 terminal을 사용하면 하단과 같이 출력되고 사용자의 입력을 기다립니다. $ overwrite or not? <y or n> 이와 같은 경우 사용자가 'y' 나 'n' 을 입력해야하는데요. 우선 exe 파일을 파이썬을 통해서 읽은 상태에서 다음과 같이 사용자의 입력을 받는다고 가정합시다. import os os.system('FILE_NAME.exe') 위와 같은 경우는 기존의 방법으로 파이썬을 사용해서 exe파일을 실행시키는것이죠. 여기에 echo문을 추가하게되면 사용자의 입력을 넣을 수 있습니다. import os os.system('echo y | FILE_NAME.exe') 만약 여러개의 입력을 넣어

Naver Blog

[c언어] command 에서 compile하기

#c언어 #cmd #compile c언어를 컴파일할 때 대부분 visual studio를 통해서 작업 많이 하실텐데요. 이를 cmd에서 컴파일하여 실행파일 만드는 방법 알려드리겠습니다. $ gcc FILE_NAME.c -o FILE_NAME 이렇게 작성하시면 FILE_NAME.c가 FILE_NAME.exe로 생성됩니다. 이렇게 생성된 실행파일로 코드 작성하시면 되겠습니다!

Naver Blog

[python] pickle을 사용하여 dictionary save & load

#python #dictionary #save #load python의 딕셔너리 dictionary을 통해 작업할 일이 많습니다. 하지만 dictionary로 생성한 데이터를 매번 코드를 실행할때 마다 dictionary를 만들기는 힘들죠 이를 해결하기위해 dictionary를 저장하고, 불러옵니다. 함수는 아래와 같고, pickle_name으로 dictionary를 저장합니다. import pickle def savepickle(pickle_name, data): with open(pickle_name, 'wb') as f: pickle.dump(data, f, pickle.HIGHEST_PROTOCOL) def loadpickle(pickle_name): with open(pickle_name, 'rb') as f: data = pickle.load(f) return data 하드코딩하지 않고 사용할 수 있는 방법입니다.

Naver Blog

[python] TypeError: unhashable type: 'list'

#python #error #typeerror 해당 에러는 딕셔너리의 key값에 list자료형을 넣으려는 시도하는 경우에 발생합니다. a = {['a']:3, 'b':1} --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-28-d713cc1dd0b7> in <module> ----> 1 a = {['a']:3, 'b':1} 2 print(a) TypeError: unhashable type: 'list' 다음과 같이 key부분에 list가 들어가지 않게 수정해주면 됩니다. a = {'a':3, 'b':1} print(a)

Naver Blog

[python] regex 한글 및 아스키 범위

#python #regex #한글 #acsii 안녕하세요 오늘은 python 에서 regex를 사용해서 한글과 아스키 범위를 잡아보겠습니다. import re def check_hangul(word): return re.match('.*[ㄱ-ㅎㅏ-ㅣ가-힣]+.*', word) def check_ascii(s): #return True/False return all(ord(c) < 128 for c in s) 위의 함수를 사용하게 되면 문장에서 한글이 들어가면 True를 반환하게 됩니다. s = '안녕하세요' if check_hangul(s): print(True) else: print(False) check_ascii함수를 사용하면 문장에서 아스키 코드 범위에 해당하는 단어가 들어가면 True를 반환합니다. s = 'abc02' if check_ascii(s): print(True) else: print(False) 아스키 코드에 해당하는 범위는 하단의 url에 들어가보시면 좋을듯

Naver Blog

[python] dictionary split by value

#python #dictionary #split 안녕하세요 오늘은 python에서 dictionary를 value값을 기준으로 쪼개는 방법을 알려드리겠습니다. python으로 작업하다보면 딕셔너리를 많이 사용하게 되는데요. 본인이 원하는 key & value만 넣고 싶은 경우도 많이 생길것 같습니다. data = {"FP3": 1, "FP4": 2, "X": 3, "Y": 4, "Foo": 5} print('before : ',len(data)) # before : 5 data2 = {key: data[key] for key, value in data.items() if value >= 3} print('after : ',len(data2)) # after : 3 print(data2) # {'X': 3, 'Y': 4, 'Foo': 5} {key: data[key] for key, value in data.items() if value >= 3} 바로 이 부분이 dictionary를

Naver Blog

[python] python 2.x vs 3.x range 함수 차이

#python #range 안녕하세요 깃허브에 있는 코드를 살펴보던 중 코드가 이상해서 살펴보니, python 버전 차이로 인한 것이더라구요. 제가 이상하다고 느낀 부분은 이 것인데요. #python2.x d = range(4) d = d + range(3) 위의 코드는 python2.x 에서 지원되는 코드 입니다. 보시면 뭔가 이상함을 느끼실까요? 저는 python3.x 버전을 사용하는데요, 보면서 느낀건 'range함수끼리 덧셈이 되나?' 싶더라구요 그래서 확인해보니, 역시나 에러(TypeError: unsupported operand type(s) for +: 'range' and 'range')를 내뱉었습니다. 하지만 위의 코드의 결과는 다음과 같습니다. #python2.x d = range(4) d = d + range(3) # [0, 1, 2, 3, 0, 1, 2] 위와 같이 range + range를 실행하기 위해서, python3.x 에서는 다음과 같이 실행하면 됩니다

Naver Blog

[python] gensim word2vec/fasttext bin file convert to txt file

#python #word2vec #gensim #binaryfile #textfile 안녕하세요 오늘은 자연어처리에 사용되는 라이브러리 중에서 gensim의 word2vec을 사용할때, bin 파일을 txt 파일로 변경하는 방법 알려드리겠습니다. import gensim model = gensim.models.KeyedVectors.load(WORD2VEC_BINARY_FILE) #put your w2v.bin file name model.wv.save_word2vec_format(WORD2VEC_TEXT_FILE) #put your w2v.txt file name 변경하는 코드는 다음과 같고, word2vec과 fasttext 둘 다 적용가능합니다. 이렇게 코드를 돌리게 되면, word2vec.bin 파일이 word2vec.txt 파일로 변환하게 됩니다. 감사합니다.

Naver Blog

[python] SyntaxError: Non-ASCII character '\xed' in file

#python #encoding #error 안녕하세요 구글링 조금만 해도 해결방안을 바로 알아낼 수 있는 이 에러에 관한 것을 저도 포스팅하려 합니다 ㅎㅎㅎ 에러는 다음과 같습니다. SyntaxError: Non-ASCII character '\xed' in file 이 에러는 코드 내에 한글이 들어간 경우에 발생합니다. 이를 핸들링하기 위해서는 간단하게 코드 위에 한줄만 적으시면 됩니다. # -*- coding: utf-8 -*- 위의 코드를 여러분께서 에러가 발생한 파일 제일 위에 첫번째 줄에 작성해주시면 해결됩니다! 감사합니다.

Naver Blog

[python] gensim word2vec 사용법

#python #gensim #word2vec 자연어처리에서 제일 처음으로 단어벡터를 만들때 많이들 사용하시는 라이브러리인 gensim에 대해 알려드리려 합니다. gensim 의 공식 문서는 https://radimrehurek.com/gensim/ 입니다. Gensim: topic modelling for humans Efficient topic modelling in Python radimrehurek.com 단어를 벡터로 표현하는 방법은 gensim에서 word2vec, fasttext, glove 등 을 제공합니다. 여기서 저희는 word2vec 사용법을 배워보겠습니다. 우선 gensim을 설치하셨다는 가정하에 진행하겠습니다. import gensim with open('./TRAIN_CORPUS.txt','r') as f: fline = [i.strip().split() for i in f.readlines()] #word2vec model create model = gen

Naver Blog

[python] used word2vec, fasttext C source file

#word2vec #fasttext 단어를 벡터로 표현하는 방법은 다양합니다. 그중에서 대표적으로 많이 사용하시는 것이 gensim일것이라고 생각됩니다. 오늘은 gensim외에 단어 벡터를 사용하는 방법을 알려드리려 합니다. word2vec Google Code Archive - Long-term storage for Google Code Project Hosting. Tool for computing continuous distributed representations of words. Introduction This tool provides an efficient implementation of the continuous bag-of-words and skip-gram architectures for computing vector representations of words. These representations can be subsequently used in many nat

Naver Blog

[python] TypeError: 'dict_items' object does not support indexing

#python #dictionary #indexing #pythonerror 안녕하세요 오늘은 파이썬에서 딕셔너리를 사용할 때, indexing으로 접근가능한 방안 알려드리겠습니다. a = '안녕하세요' dictionary = dict() for i in a: if i in dictionary: dictionary[i] += 1 else: dictionary[i] = 1 print(dictionary) #{'안': 1, '녕': 1, '하': 1, '세': 1, '요': 1} 다음과 같이 딕셔너리를 만들었다고 가정합니다. 그럼 여기서 이제 리스트처럼 인텍싱을 사용해서 접근하고 싶으면 이렇게 타이핑 치시겠죠. b = dictionary.items() print(b[0]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'dict_items' object is not subscriptabl

Naver Blog

[python] TypeError: 'NoneType' object is not subscriptable

#python #error #None 안녕하세요 오늘 발생한 에러는 TypeError: 'NoneType' object is not subscriptable 인데요. 이 에러가 발생하게 된 이유는 'None'타입인 값에 index로 접근하려해서 발생했습니다. a = None print(a[0]) TypeError: 'NoneType' object is not subscriptable 위와 같은 에러가 발생하게 되죠. 이를 해결하기 위해서는 a에 None말고 리스트나 문자열을 넣어주시면 됩니다. 여러분의 코드에 따라 수정해야할 것이 다를것으로 보입니다. 감사합니다.

Naver Blog

[python] string index find vs index

#python #string #index #find 안녕하세요 오늘은 python에서 string의 index를 찾기위해 사용되는 함수 'index' 와 'find'의 차이를 작성하려 합니다. 사용되는 이유는 둘 모두 문자열에서 원하는 단어의 index를 찾기 위해서입니다. a = '안녕 반가워' a.index('반') # 3 a.find('반') # 3 또는 이렇게 시작 위치를 지정할 수도 있습니다. a = '안녕 반가워 반은 어디니?' a.index('반', 5) # 7 a.find('반', 5) # 7 둘이 매우 비슷해 보이지만 없는 단어를 찾으려 할때, 차이점이 나타납니다. index는 없는 단어를 찾을 때, 에러를 발생하는 반면에, find는 -1을 리턴합니다. a = '안녕 반가워' a.index('하') # ValueError: substring not found a.find('하') # -1 감사합니다.

Naver Blog

[python] matplotlib 한글 깨짐 및 마이너스(-)기호 깨짐

#python #matplotlib #한글깨짐 #마이너스깨짐 #ubuntu jupyter notebook 환경에서 matplotlib를 보기 편해서 많이들 사용하죠. jupyter notebook에 한글이 기본으로 잡혀있지 않아서 별도로 설정해줘야 합니다. 저는 ubuntu 16.04 운영체제 환경 기준으로 설명드리겠습니다. ubuntu 에는 기본적으로 나눔폰트가 설치되어 있습니다. 만약 없으시다면 별도로 설치하시면 됩니다. ls -l /usr/share/fonts/truetype/nanum/ -rw-r--r-- 1 root root 4184028 10월 3 2014 NanumBarunGothic.ttf -rw-r--r-- 1 root root 4413912 10월 3 2014 NanumBarunGothicBold.ttf -rw-r--r-- 1 root root 4343844 10월 3 2014 NanumGothic.ttf -rw-r--r-- 1 root root 4288380 10

Naver Blog

[python] Segmentation fault (core dumped)

#python #pytorch #transformers Segmentation fault (core dumped)와 같은 에러는 C에서 주로 포인터를 사용할때, 허용되지 않은 메모리 부분에 접근하려할 때나, 허용되지 않은 방법으로 메모리를 접근하려할 때 발생하는 에러이다. 나는 python환경에서 transformers를 사용할 때, 모델을 불러오는 과정에서 에러가 발생했고, Segmentation fault (core dumped)뿐만 아니라, Illegal instruction (core dumped)도 번갈아서 발생했다. 이를 해결하기 위해서 구글링을 해보니, sentence piece의 버전을 0.1.91로 낮추면 에러가 잡힌다는 말을 보게 되었다. 놀랍게도, 성공적으로 돌아간다. pip install sentencepiece==0.1.91

Naver Blog

[python] bert embedding 사용하기

#python #bert #embedding bert embedding을 사용하기 위해서 구글링 하던중, 다양한 에러를 만났지만 해결해낸 과정을 작성해보고자 한다. 1. hugging face의 transformers의 버전 차이 pip install transformers 여러분의 python버전에 따라 설치되는 transformers의 버전이 다르다. 저는 python3.5에서는 transformers 2.x까지만 설치되는 까닭에 TypeError: 'BertTokenizer' object is not callable 이런 에러를 만나게 되었다. python3.6이후에는 transformers 3.x가 설치되었고, 위의 에러는 해결할 수 있게 되었다. 2. output hidden state값 가져오기 대부분의 블로그는 bert의 'bert-base-uncased' 모델을 사용했다. 내가 하고 싶었던 부분은 한국어를 다루기 위해 bert를 사용하는 것이라 적합하지 않았다. 따라서

Naver Blog

조경현 교수님의 강의파일

#조경현 #nlp #nyu 조경현 교수님께서 2016년도 뉴욕대학교에서 강의하신 강의파일과 강의영상 1시간짜리를 올려주셨습니다. Lecture note <Brief Introduction to Machine Learning without Deep Learning> - Kyunghyun Cho This past Spring (2017), I taught the undergrad <Intro to Machine Learning> course. This was not only the first time for me to teach <Intro to Machine Learning> but also the first time for me to teach an undergrad course (!) This course was taught a year before by David Sontag who has now moved to M... sites.google.com 블로그에 들어가시면 많은 도

Naver Blog

[python] json dump 한글 깨짐

#python #json #dump json file을 읽어들어오는데는 문제가 없었지만, dump하는 과정에서 한글이 유니코드로 보이는 문제가 있었다. import json data = json.load(file) print(json.dumps(data)) #{word:'w\u3141'} 이를 해결하기 위해 ensure_ascii=False 을 집어넣으니 한글이 제대로 보였다. import json data = json.load(file) print(json.dumps(data, ensure_ascii=False)) #{word:'한글'}

Naver Blog

[python] ModuleNotFoundError: No module named 'tensorflow.contrib'

#python #tensorflow ModuleNotFoundError: No module named 'tensorflow.contrib' 이 에러는 인터넷에서 가지고 온 코드에 tensorflow.contrib를 사용하려할 때 발생했다. 이를 해결하기 위해서, 찾아보니 tensorflow version 차이 때문이라는 답을 얻었다. 1.14버전까지만 지원한다는 것!! 따라서, 버전을 낮추면 해결된다. pip install tensorflow==1.14 #cpu version pip install tensorflow-gpu==1.14 #gpu version

Naver Blog

[python] RuntimeError: Given input size: . Calculated output size: . Output size is too small.

#python #pytorch 오늘의 에러 'RuntimeError: Given input size: (256*100*20). Calculated output size: (256*0*0) . Output size is too small.' 괄호에 들어간 숫자는 여러분의 input shape에 따라 달라질듯 에러 발생원인 input size가 kernel 에 비해 작으면 발생했음 해결방안 input shape을 늘리거나, pooling layer의 kernel size을 줄이면 해결

Naver Blog

[python] RuntimeError: mat1 dim 1 must match mat2 dim 0

#python #pytorch #cnn 오늘의 에러 'RuntimeError: mat1 dim 1 must match mat2 dim 0' 에러 원인 cnn network에서 nn.Linear()를 통과할 때, input shape이 nn.Linear()의 입력 shape과 다를 때, 발생 해결 방안 nn.Linear layer를 통과하기 전에 shape을 찍어보고 nn.Linear의 shape과 같은지 확인하기

Naver Blog

[pytorch] ValueError: Expected input batch_size (_) to match target batch_size (_)

#python #pytorch #RNN 안녕하세요 오늘의 에러는 ValueError: Expected input batch_size (_) to match target batch_size (_) 이고 발생 원인과 해결 방안을 알아보겠습니다. 발생원인 저의 경우에는 input size가 3차원이고, [배치, 문장길이, 사이즈]였는데요. 여기서 문장길이가 지정된 모델의 사이즈랑 안맞아서 발생했습니다. 즉, 모델에서 요구하는 2차원의 값은 20이었는데, 문장길이가 19였던 문제입니다. 해결방안 이를 해결하기 위하여 입력값의 shape를 확인해 보면서 어디서 틀어지는지 확인하는게 가장 좋았습니다. 이런 함수를 하나 써도 금방 잡힐 것 같네요. if ( (target.shape[0],target.shape[1]) != (2,20)): print('error') print(source.shape) print(target.shape)

Naver Blog

[KenLM] KenLM 설치 방법

#python #kenlm 안녕하세요 올해의 마지막 포스팅은 KenLM 설치 방법입니다. 본 포스팅은 우분투 환경을 기준으로 합니다. 박사과정 중에서 최적화만 하셔서 만들어낸 결과물 이라고도 하죠 ㅎ 설치방법은 공식 홈페이지에도 나오지만 자세하게 적혀있는 곳을 찾아서 한글로 번역하였습니다. 공식사이트 kpu/kenlm KenLM: Faster and Smaller Language Model Queries. Contribute to kpu/kenlm development by creating an account on GitHub. github.com 참고한 사이트 kmario23/KenLM-training Training an n-gram based Language Model using KenLM toolkit for Deep Speech 2 - kmario23/KenLM-training github.com 1. 설치 준비사항 $ sudo apt-get install build-ess

Naver Blog

[ubuntu] 자주 쓰는 명령어 정리

#ubuntu #terminal #command 1. 파일 찾기 ls -al | grep '.*.txt$' #.txt로 끝나는 파일 찾기 ls -al | grep 'KCC.*' #KCC가 파일명에 들어가는 파일 찾기 ls -alR | grep '.*.txt$' #.txt로 끝나는 파일을 하위 폴더에서 찾기 2. 두 파일 간의 다른점 찾기 diff a.txt b.txt vim a.txt :diffs b.txt 3. 파일 변경, 삭제, 이동 cp a.txt b.txt # copy a.txt file to b.txt mv a.txt b.txt # move a.txt to b.txt 덮어쓰기 mv a.txt ./data/a.txt #move a.txt to data folder 파일 이동 rm a.txt # delete a.txt 4. 파일 라인, 단어, 음절 개수 wc a.txt #result : 문장수, 단어수, 음절수

Naver Blog

[pytorch] ERROR: Command errored out with exit status 1:

#python #pytorch #fairseq fairseq라는 툴을 요즘 사용중이다. 로컬에서는 잘 설치되지만 가상환경에서는 아래와 같은 에러가 발생했다. WARNING: The user site-packages directory is disabled. error: can't create or remove files in install directory The following error occurred while trying to add or remove files in the installation directory: [Errno 13] Permission denied: '/usr/lib/python3.6/site-packages' The installation directory you specified (via --install-dir, --prefix, or the distutils default setting) was: /usr/lib/python3.6/site-packa

Naver Blog

[ssh] WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

#ssh #error 위의 에러는 RSA 공유키가 충돌되어 발생한 에러이다. 발생원인 기존에 IP 203.000.000.77로 접속한 적이 있는 상태에서, 다른 IP가 203.000.000.77 변경되어서 접근하려할때 발생 즉, 원래 203.000.000.77인 IP 와 RSA를 공유했는데, 시간이 지나면서 다른 IP가 203.000.000.77를 가지고 있는 상태로 변경되면서, 기존의 RSA와 현재 RSA가 달라서 발생하는 에러임, 해결방안 ssh-keygen -R 203.000.000.77 위의 command를 치고, 다시 접속하면 해결됌!

Naver Blog

sparse vector란?

정의 원핫인코딩과 같이 벡터의 많은 부분이 0으로 채워진 벡터 원핫인코딩이란? (one-hot encoding) 단 하나의 1과 수많은 0으로 표현된 인코딩 방식 예시 단어 원핫벡터(one-hot vector) 강아지 0,0,0,0,1 개 0,0,0,1,0 고양이 0,0,0,1,1 단점 원핫인코딩의 차원은 전체 어휘의 개수가 되고, 전체 어휘의 개수가 많아 질 수록 차원이 엄청나게 커지게 된다. sparse vector의 단점 앞선 원핫인코딩의 단점과 같이, sparse vector(희소 벡터)는 벡터간 연산시 결과값이 0이 된다는 점이다. 쉽게 이야기 하면, 강아지랑 개의 유사도는 높지만 계산을 진행해보면 결과값이 0이 나온다는 이야기이다. 또한, '차원의 저주'라는 단점을 가진다. 차원의 저주란? 높은 차원에 비해 들어있는 정보가 매우 낮은 밀도로 퍼져있어 빈 공간이 많은 경우 이러한 문제는 머신러닝에서 큰 단점으로 작용함 예시), 3000차원에서 one-hot vector로는

Naver Blog

[python] AttributeError: 'module' object has no attribute 'generate_tokens'

#python #error 오늘의 에러 AttributeError: 'module' object has no attribute 'generate_tokens' (AttributeError: module 'tokenize' has no attribute 'tokenize') 발생 원인 파이썬 파일 이름 중에서 tokenize.py를 가진 파일을 내가 생성했었고, 파이썬 모듈에서도 tokenize.py 모듈을 불러오는 함수가 있었던것, 즉, 파일 이름이 충돌되면서 내가 만든 파일을 사용하게 되었고, 에러가 발생하게 됨 해결 방안 import tokenize print(tokenize) #<module 'tokenize' from '/home/hyejin/.../tokenize.py'> 위와 같이 실행시켜보면 모듈의 위치가 존재하는 곳의 경로가 뜬다. 해당 파일의 이름을 변경시키면 에러없이 잘 돌아간다.

Naver Blog

python3.7 install ubuntu 16.04

#python #ubuntu #shell 오늘은 ubuntu 16.04의 파이썬 버전을 업그레이드 시켜줄껍니다. 아래와 같이 쉘을 작성하고, 실행시키면 설치가 완료 됩니다! vim install_python37.sh vim을 열어서 아래의 쉘을 작성해주세요! # Install requirements sudo apt-get install -y build-essential sudo apt-get install -y checkinstall sudo apt-get install -y libreadline-gplv2-dev sudo apt-get install -y libncursesw5-dev sudo apt-get install -y libssl-dev sudo apt-get install -y libsqlite3-dev sudo apt-get install -y tk-dev sudo apt-get install -y libgdbm-dev sudo apt-get install -y lib

Naver Blog

[shell script] 쉘에서 source가 작동하지 않을 때

쉘로 스크립트를 작성하시다 보면 실행을 시키죠! 여기서 저는 주로 'sh'를 사용해서 실행시켰는데요. source를 포함하는 경우에는 sh로 실행시키면 soure가 작동되지 않는 문제가 있었습니다. 이를 해결하기 위해서는 'bash'로 실행시키면 작동이됩니다! sh python_install37.sh -> bash python_install37.sh

Naver Blog

[python] sys.args vs argparse

#python #sys #argparse 파이썬 파일에 인자를 준다면 여러분은 어떤 것을 사용하시려나요. 대표적으로는 sys.args 와 argparse 를 사용하실 것 같습니다. 이 둘은 비슷한것으로 보이지만 사실은 좀 다른 것 같아요. 그래서 오늘은 이 둘의 차이점을 보려고 합니다. Python sys.argv and argparse I have been looking for ways to add argument values to a script when I run it from the command line. The two packages I have found that seem to do this are sys.argv and argparse. I'd also like to be stackoverflow.com sys.args 이것은 command line 인자들을 간단하게 리스트로 받는 명령어 입니다. 리스트로 인자를 받기 때문에 해당 인자가 들어가는 위치를 기억하는 것이

Naver Blog

how to make evaluation metric in GEC?

#precision #recall #evaluation #metric #deeplearning 본 포스팅은 아래의 논문을 발췌독 하여 GEC task에서 evaluation metric를 어떻게 구성하는지에 관한 부분만 작성되어있습니다. The CoNLL-2014 Shared Task on Grammatical Error Correction Hwee Tou Ng, Siew Mei Wu, Ted Briscoe, Christian Hadiwinoto, Raymond Hendy Susanto, Christopher Bryant. Proceedings of the Eighteenth Conference on Computational Natural Language Learning: Shared Task. 2014. www.aclweb.org sample sentence - There is no a doubt , tracking system has brought many benefits in

Naver Blog

대칭이동, 평행이동 cost function

매번 헷갈리는 대칭이동, 평행이동 개념을 이번 기회에 바로잡기위해 작성한다. 대칭이동이란 - 점이나 도형을 한 점 또는 한 직선에 대하여 대칭인 점이나 도형으로 이동하는 것을 의미 ex. x축에 대한 대칭이동 : (x,y) -> (x,-y) y축에 대한 대칭이동 : (x,y) -> (-x,y) 원점에 대한 대칭이동 : (x,y) -> (-x, -y) 평행이동이란 - 좌표평면위의 임의의 점을 좌표축에 나란하게 이동시키는 것을 평행이동이라 한다. ex. 점 p(x,y)를 x축으로 a, y축으로 b만큼 평행이동시키게 되면 P′(x + a, y + b)로 옮겨지게 된다 좀 더 자세히 설명된 그림을 첨부한다. 출처 : https://pythonkim.tistory.com/28 딥러닝에서 cost함수를 열어 공부하다보면 이 개념이 나타난다. 이 그림을 cost함수와 엮어서 사용한다면, 아래와 같다. original : y = logX a. x축 대칭이동 => y = -logX b. y축 대칭이

Naver Blog

[python] argparse multi-argument

#python #argparse 파이썬에서 argparse를 사용하는데, 한개의 값 말고 옵션값에 다른 값들을 넣고 싶었다. 그래서 구글링 해보니 아래와 같은 해답을 얻게 되었다. 해결방안 action='append', nargs='+' import argparse parser = argparse.ArgumentParser() parser.add_argument("--i", action='append', nargs='+') args = parser.parse_args() #실행결과 $ run_test.py -i input1_url input1_name input1_other_var -i input2_url nput2_name input2_other_var -i input3_url input3_name $ [['input1_url', 'input1_name', 'input1_other_var'], ['input2_url', 'input2_name', 'input2_other_var']

1 2 3