File - New - New Project 순으로 눌러서 이동합니다.

 

여기서 원하는 UI에 맞게 선택하고 Next를 눌러주면 됩니다. 저는 No Activity 로 선택하겠습니다.

 

언어는 Java로 선택하겠습니다.. kotlin 보다는 Java 가 구글에서 정보를 찾기에 더 편합니다..

Finish를 누르게 되면 프로젝트가 생성됩니다. 잠시 시간이 걸리니 조금만 기다려주세요..

 

다음 화면과 같이 나오게 되면 프로젝트 생성 성공입니다.

 

vs 코드 확장 프로그램은 vs코드 좌측 제일 하단 이모티콘 부분을 누르면 보실수있습니다

방법은 검색후 install 누르시면 끝입니다 어려운거 없죠?

설치완료후 우측하단에 다음과 같이 나오게 되는데 누르고 재시작해주시면 됩니다.

편안

'웹 홈페이징 > 끄적끄적,,' 카테고리의 다른 글

웹 개발 일기 1 (HTML,CSS)  (0) 2022.11.08

리액트 프로젝트를 생성하기 위해서 바탕화면에 새폴더를 만들고 shift + 오른쪽 마우스키 -> 여기에 shell창열기

프로젝트 명은 'test' 로

npx create-react-app test 명령어를 입력해 주었습니다.

다음과 같이 오류가 발생하였습니다,,

검색을해보니

npm install create-react-app 명령어 입력을통해

먼저 설치를 해주어야한다고하네요

설치가 끝나고 이제 npx create-react-app test

명령어를 통해 다시 리액트 프로젝트를 생성해보겠습니다.

잘 생성이 되는 모습입니다.. 

 

이제 vs 코드에서 npm start 로 실행을 시켜보았는데 문제 없이 잘 돌아가는 모습입니다.

설치는 이곳에서 ->  Node.js (nodejs.org)

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

홈페이지 접속후 LTS 버전으로 다운로드 합니다. 전부 다음다음 하면 설치완료,,

설치 완료 하셨다면 이제 두가지 설정을 해야합니다

1. 환경변수 설정

2. 실행규칙 변경

환경변수 설정은 다음과 같습니다

1.검색창에 ->  sysdm.cpl 검색하기

 

2. 시스템속성 - 고급 - 환경변수 선택

3. 시스템 변수 - 새로만들기

4. 이대로만 넣기

변수이름 : NODE_HOME

변수값 : C:\Program Files\nodejs

5. 시스템 변수 잘보면 path라는 항목이있습니다 선택

6 새로만들기 선택후

7. %NODE_HOME% 입력후 확인

이것으로 환경변수 설정은 끝났고 이제 실행규칙을 변경해야합니다.

 

1. powershell '관리자 권한' 으로 실행하기.

 

2.Set-ExecutionPolicy Unrestricted 입력(복붙하세요,,)

3. Y후 엔터

 

여기까지 다하셨다면 cmd창을 열어서 node -v 를 입력해보세요

버전이 잘 나왔다면 설치가 잘 된것입니다,, ㅎㅎ

혹시나 실행에 오류가 있을경우 환경변수나 실행규칙에 문제가 있을경우가 많으니 꼭 설정바랍니다.

이 외에는 컴퓨터마다 환경,,설정이 다 달라서 제일 빠른방법은 본인이 나는 오류 검색해보는방법입니다.

큰수 덧셈을 위해 필요한 정보를 차근차근 알아보았습니다.

앞서 말하면 int 자료형은 4byte 입니다

1byte 는 8bit이므로 4*8 = 총 32bit입니다

그러므로 2의 32승 만큼 표현이 가능합니다.

2의 32승은 =4,294,967,296 만큼 표현이 가능하다는 얘기입니다

이중 절반은 음수 절반은 양수이기 때문에

-2,147,483,647 ~ 2,147,483,647 값까지 표현할수있습니다.

그러면 long long int 형은 어떨까요?

자료형 long long int 는 8byte의 크기로

2의 64승 만큼의 크기를 나타낼수있습니다,,

그렇다면 크기를 초과하는 숫자는 ?

문자열 로 연산 수행을 해주어야합니다.

 

1. 세로열을 통한 덧셈으로 10이상이 넘어가면 해당배열의 값에서 10을 빼고 다음이나 이전배열에 +1

2. 계산하려는 숫자의 배열 역순으로 출력.

 

역순으로 출력해야하는 이유는 덧셈의 경우 다음과 같습니다.

15678,3456 임의의 두수를 덧셈을 하겠습니다.

일반적인 덧셈은 이런방식으로하죠?

하지만 배열은

이런식으로 저장되어있어 원하는 식으로 덧셈을 수행해 줄수가없습니다.

그렇다면 역순으로 배열의 내용을 바꾸어 준다면 어떨까요?

결과값을 다시 역순으로 출력해주면 

원하는 덧셈을 수행할수있겠죠?

한번 생각하고 그려본걸 코드로 구현해보겠습니다.

#include <string.h>// strlen 함수로 문자열 길이를 구하기 위해 가져왔습니다.
int main() {
	
	char arr1[6] = {1,5,6,7,8}; // 문자열은 꼭 +1 마지막에/0 값이 있어요
	char arr2[5] = {3,4,5,6}; // 마찬가지

	int len1 = strlen(arr1); // 위 배열의 길이 5; 
	int len2 = strlen(arr2); // 위 배열의 길이 4


	 // 여기는 이제 역순으로 출력할거에요  알아야할게 5번까지의 배열을 0-4,1-3 이런식으로 바꾸어서 4,3,2,1,0번 으로 바꿀수 있게 해줄거에요 
	for (int i = 0; i < len1/2; i++) {   // 가운데 조건을 1/2로 한 이유는 예를들어 len1이 5일경우 5/2는 2이므로 0부터 2까지 반복하죠?(아래로)
		int tmp = arr1[i];               // 변수 tmp에 값을 저장해주지 않으면 바꿀수없습니다.
		arr1[i] = arr1[len1 - i - 1];    // arr1[i] = arr1[len1 - i - 1] i가 0일때 arr1[0] = arr1[5-0-1] 즉 arr1[0]번값에 arr1[4]를 대입하라는 의미입니다.
		arr1[len1 - i - 1] = tmp;        // 그러면 여기는 arr1[4]에 위에 저장한 tmp=arr1[0] 값이니까 arr1[4]=arr1[0] 잘 바꿧씁니다.,,하하
	}
    
    
	//여기는 arr2의 역순 구하기
	for (int i = 0; i < len2 / 2; i++) {
		int tmp = arr2[i];
		arr2[i] = arr2[len2 - i - 1];
		arr2[len2 - i - 1] = tmp;
	}
    
    
	// 잘 되었는지 확인해볼게요
	for (int i = 0; i < len1; i++) {
		printf("%d ", arr1[i]);
	}
	printf("\n");
	for (int i = 0; i < len2; i++) {
		printf("%d ", arr2[i]);
	}
	
}

대 만족

다음엔 실제로 덧셈하는걸로 넘어가서 해볼게요!

출처:https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

흠.. 일단 보고 뭐지라는 생각을 제일 먼저 했습니다.

차근차근 읽어보니 요구하는것은

1. 문자열 입력 받기.

2. 입력받은 문자열이 나오는 순서대로 저장하기 (나오지 않은 알파벳은 -1로 처리)

apple를 예로 들겠습니다

ex) a(0)  p(1)  p(2중복생략)  l(3)   e(4)  

 0(a) -1(b) -1(c) -1(d) 4(e) -1(f) -1(g) -1(h) -1(i) -1(j) -1(k) 3(l) -1(m)

-1(n) -1(o) 1(p) -1(q) -1(r) -1(s) -1(t) -1(u) -1(v) -1(w) -1(x) -1(y) -1(z)

아 

0  -1  -1  -1  4  -1  -1  -1  -1  -1  -1  3  -1  -1  -1  1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1

결국 위에 값이 나오게 짜야합니다

오늘 아르바이트를 19시에갔는데 가기전에 계속 고민하고

가서도 계속 고민했습니다. (지금은 새벽 두시입니다,,)

어떤식으로 해야 구현할수있을지..

결국 필요한건 아래와 같다고 생각이들었습니다.

1. 문자열 입력받기

2. 비교할 알파벳 문자열(아스키코드)

3. -1과 1번에서 입력받은 문자열 순서 입력할 정수형 배열

4. 1번의 문자열에서 중복값제거하기

apple->ap0le 이런느낌으로요

코드를 짜보겠습니다..

#include<stdio.h>
#include<string.h> //strlen 함수 이용해서 입력받은 문자열 길이를 알아낼거에요

int main(){
//----------------------------------------------------------------------------------------//
    int arr[26]; //알파벳 소문자는 26글자니까 -1,-1,1,2,3... 형식으로 저장될 정수형 배열
    
    char alp[27] ={NULL}; //사실 {a,b,c....} 이런 식으로 초기화 해주어도 괜찮지만
    // 밑에 처럼 for문으로 깔끔하게 나타내고 싶었습니다..(더럽다면.. 죄송합니다)
    // 27인 이유는 문자열은 마지막에 널값이 있어서 꼭 하나 더 추가해주어야합니다 오류남
    
    char input[101]; // 최대 문장의 길이는 100이지만 위와 같은이유로 +1 해서 101
    
//----------------------------------------------------------------------------------------//    
    //배열 -1 대입하기//
    for (int i = 0; i < 26; i++) { // 정수형 배열에 없는 값은 -1로 표현하기로했으니
		arr[i] = -1;               // 26칸에 -1을 넣어줍니다.
	}
//----------------------------------------------------------------------------------------//    
    
    // 문자열에 알파벳 저장하기//
    for(int i=97;i<=122;i++){ // 아스키코드 97~122번은 a~z입니다
    alp[i-97]=i;    //i=97 일때 alp[0]=97, alp[1]=98.. 이런느낌으로 반복저장합니다. 
    		}
	
//----------------------------------------------------------------------------------------//
	
    //문자열 입력받기//
    scanf("%s",input); // 이건 쉽죠..?
    
//----------------------------------------------------------------------------------------//
    
    //*입력받은 문자열에서 중복값 제거 apple -> ap0le 이런느낌*//
    
    for (int i = 0; i < strlen(input); i++) {         
		for (int j = i+1; j < strlen(input); j++) { 
   // 두번째 for문에서 초기값을 i+1로 해두어서 비교할 문자열의 다음 문자부터 비교를해줍니다//
   // 이렇게 하지않으면 자기 자신도 비교하고 중복값으로 판단해 a00le 이렇게 나와요..//
			if (input[i] == input[j])  
				input[j] = '0'; 
		}
	}
	//printf("%s",input); -> ap0le 이렇게 출력됩니다//
    
//----------------------------------------------------------------------------------------//

    // 이제 정수형 배열에 값 저장하기//
    for (int i = 0; i < strlen(input); i++) { //중복값을 제거한 입력값을
		for (int j = 0; j < 26; j++) { // 하나하나 알파벳 전부랑 비교합니다
			if (input[i] == alp[j]) { // 만약 비교하는 값이 알파벳 순서대로 저장한 배열과 일치하면
				arr[j] = i; //알파벳 배열의 위치와 동일하게 정수형배열 arr에 저장해줍니다.
			}
		 }
        }
//----------------------------------------------------------------------------------------//
            for (int i = 0; i < 26; i++) {
            printf("%d ", arr[i]); //출력해주면 끝이에요... %d 뒤에 공백..신경쓰기
        }
    
}

사실 뭔가 분명 더 좋은 방법이 있었겠죠?

댓글로 남겨주시면 감사하겠습니다.

이제 예상한대로 나오는지 입력해볼게요..

apple      bobby    airplane     입력해보겠습니다.

아 기쁘다 해내니까

실수한 부분이나 이상한곳있으면 

지적 꼭 부탁드립니다!

감사합니다

일단 시간관련 함수를 사용하기 위해 time.h 라이브러리를 불러와줍니다

#include <stdio.h>

#include <time.h> //이곳입니다

int main(){


}

time.h 라이브러리에 있는 함수를 이용할것인데요

time_tlocaltime() 함수를 이용해야합니다

#include <stdio.h>
#include <time.h> 

int main(){

  	time_t t=time(NULL);
  	struct tm tm = *localtime(&t);

}

time_t 형태의 변수 t를 struct tm 구조체 값으로 변환하고localtime 함수는 구조체 포인터 값을 반환하기 떄문에struct tm tm =*localtime(&t)형태로 선언합니다.

struct tm {
   int tm_sec;   // 초
   int tm_min;   // 분        
   int tm_hour;  // 시      
   int tm_mday;  // 일        
   int tm_mon;   // 월        
   int tm_year;  // 년 ※1900년 부터의 년입니다.     
   int tm_wday;  // 요일    
   int tm_yday;  // 1년중 경과일 0~365     
   int tm_isdst; //      
};

struct 구조체의 내용은 다음과 같습니다 

예제 입력후에 결과값 받아보겠습니다

1. 년 월 일 시 분 초 입력받기

여기서 년은 +1900

월은 +1해야 현재 시간을 받아볼수있습니다.

이유는 년도는 1900년 이후 시간을 표시해주고

월은 구조체 안에 -1값으로 저장되어있기때문에

이점만 유의해서 출력하면됩니다!

#include<stdio.h>
#include<time.h>


int main() {
	time_t t = time(NULL);
	struct tm tm = *localtime(&t);

	printf("%d %d %d %d %d %d", tm.tm_year + 1900,   // 년도 1900년 이후 +1900
    	                          ,tm.tm_mon +1      // 월은 -1값 임으로 +1
                                  , tm.tm_mday       // 일
                                  , tm.tm_hour       // 시간
                                  , tm.tm_min        // 분
                                  , tm.tm_sec  );    // 초
	

}

코드는 가독성을 위해 이렇게 작성하였습니다

(이렇게 하면 오류납니다,,)

하하

2022년 11월 12일 15시 42분 44초 잘 출력되는걸 확인해볼수있습니다.

갑자기 든생각인데 시간을 AM PM형식으로 출력하려면 

어떤식으로해야할까요

#include<stdio.h>
#include<time.h>

int main() {
	time_t t = time(NULL);
	struct tm tm = *localtime(&t);

	char pm[3] = "PM"; // 오후
	char am[3] = "AM"; // 오전
	
	int n = 0;  //16시를 4시로 바꾸고 저장해줄 변수 n 선언
	if (13 <= tm.tm_hour && tm.tm_hour <= 23) { //13시 보다 크거나 23시보다 작을때 
		n= tm.tm_hour - 12;              //12를 빼주어야 1시~11시까지로 나타낼수있겠죠?
	}
	if (13 <= tm.tm_hour && tm.tm_hour <= 23) { // 오후는 13시부터 23시까지 잡았습니다
		printf("%s %d",pm,n); 
	}
	else {
		printf("%s %d",am,n); // 아니라면 오전으로 출력
	}

}

오후 4시라고 잘 나왔습니다.

(혹시 반례나 이상한게 있다면 얘기해주세요)

봐주셔서 감사합니다~!

사실 전역한지 얼마 안되어서 

16시 라고 이야기하는게 편하네요,,

끄적 끄적..

기존에 있는 배열의 값입력을 통해 받은 배열의 값

비교하고 중복되는 값을 저장하고 출력하는 문제입니다.

꽤 많은 시간이 들었던거같습니다... 이해가 안가면 끝까지 잡고있어야해서..

int main(){

                int arr_1[5]; // 기존에 주어질 값
                int arr_2[5]; // 입력받을값
                int arr_3[5]; // 비교하여 저장할곳

}

배열을 총 3개 각각과 같이 선언해주었습니다.

int main(){

         int arr_1[5]={1,2,3,4,5}; // 비교당하는 곳 초기화 (1)
         int arr_2[5]; 
         int arr_3[5]={0}; // 저장공간 초기화 (2)
 
			
            for(int i=0;i<5;i++){
            	scanf("%d",&arr_2);  //arr_2 배열에 값 입력받기(3) 
            }
}

제가 하고싶은건

다섯칸의 정수형 배열 arr_2[5]에 입력을 받고 

기존의 값 

int arr_1[5]={1,2,3,4,5}; 와 비교하는 것입니다.

따라서 (1)번과 같이 초기화(3)번과 같이 for문으로 arr_2번에 입력받아 저장했습니다

int main(){

         int arr_1[5]={1,2,3,4,5};
         int arr_2[5]; 
         int arr_3[5]={0}; 
			
            for(int i=0;i<5;i++){
            	scanf("%d",&arr_2);   
            }
            
            for(int i=0;i<5;i++){   // 비교하여 arr_3에 저장!
            	for(int j=0;j<5;j++){
                	if(arr_1[i]==arr_2[j]){
                    	arr_3[i]=arr_1[i];
                    }
                }
            }
            
}

여기가 핵심인데 그림으로 좀 그려보겠습니다

선언되어 있는 배열을 그림으로 나타냈습니다.

arr_2 값에는 임의로 5,6,7,8,9 라는 값을 넣어주었다고 임의로 가정했습니다.

죄송해요 더러워서

 for(int i=0;i<5;i++){
            
           for(int j=0;j<5;j++){
                
               if(arr_1[i]==arr_2[j])  {
                    
                        arr_3[i]=arr_1[i];
                   }

반복 비교부분만 때서 볼게요

첫번째 반복문의 i가 0 일때 두번째 반복문을 j=0부터 5까지 반복하겠죠?

이말을 다르게 하면 첫번째 배열의 i값의 해당하는 값두번째 배열의 모든 값

반복하여 비교해볼수있다는 얘기입니다 

이런 느낌으로요,,

그리고

 for(int i=0;i<5;i++){
            
           for(int j=0;j<5;j++){
                
               if(arr_1[i]==arr_2[j])  { // <- 여기로 일치하는지확인하고
                    
                        arr_3[i]=arr_1[i]; // <-여기로 arr_3번 배열에 중복값 저장시켜요
                   }

그러면 전부 해당 안되다가

arr_1[4]arr_2[0] 번 값이 5로 일치하죠?

그러면 일치할때 arr_3[ i ]값에 대입하라니까 다음과 같습니다

저장해요
그러면 arr_3[4]는 5에요.

int main(){

         int arr_1[5]={1,2,3,4,5};
         int arr_2[5]; 
         int arr_3[5]={0}; 
			
            for(int i=0;i<5;i++){
            	scanf("%d",&arr_2[i]); // 여기오타였어요 죄송합니다  ㅎㅎ 
            }
            
            for(int i=0;i<5;i++){   // 비교하여 arr_3에 저장!
            	for(int j=0;j<5;j++){
                	if(arr_1[i]==arr_2[j]){
                    	arr_3[i]=arr_1[i]; //  (1)
                    }
                }
            }
            
            for(int i=0;i<5;i++){ 
                 if(arr_3[i]!=0){ // 위에 (1)번에서 저장안된 애들은 0이겠죠?
                 	printf("%d\n",arr_3[i]); // 0 이 아니라면 출력한다. 그르면 중복된값을 출력하겠죠?
                 }
            }            
}

5,6,7,8,9 대입
1,2,5,6,9

붙잡고 씨름을 좀 했더니 어지럽네요,,

+ Recent posts