https://www.acmicpc.net/problem/11050

 

11050번: 이항 계수 1

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net

 

 

팩토리얼 함수를 구현하여 표현하였다.

코드 효율은 낮을 수도..

 

맞은 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int factorial(int n) {
	int num = 1;

	if (n == 0) return 1;

	for (int i = 2; i <= n; i++) {
		num = num * i;
	}
	return num;
}

int main() {

	int N, K;
	scanf("%d %d", &N, &K);

	int a = factorial(N);
	int b = factorial(K);
	int c = factorial(N - K);

	printf("%d", a / (b*c));

	return 0;
}

https://www.acmicpc.net/problem/1323

 

 

참고한 블로그

https://khu98.tistory.com/96

 

[백준OJ] 1323번 숫자 연결하기

www.acmicpc.net/problem/1323 1323번: 숫자 연결하기 첫째 줄에 N과 K가 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. K는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net -풀이- 1. 먼저 22를 9로

khu98.tistory.com

정답 코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int check[100001] = { 0 };

long long make_digit(int n) {
	long long digit = 0;
	while (n > 0) {
		digit++;
		n /= 10;
	}
	digit = pow(10, digit);
	return digit;
}

int main() {

	int n, k;
	scanf("%d %d", &n, &k);
	long long digit = make_digit(n);

	int cnt = 1;
	int remainder = n % k;
	int flag = 1;
	while (remainder != 0) {
		remainder = (remainder * digit + n) % k;
		if (check[remainder]) {
			flag = 0;
			break;
		}
		check[remainder] = 1;
		cnt++;
	}
	if (flag) {
		printf("%d\n", cnt);
	}
	else {
		printf("-1\n");
	}
	return 0;
}

 

 

 

 

 

시간초과 코드1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int N, K;

	scanf("%d %d", &N, &K);
	int n = N;

	long long int mult = 1;
	int i = 1;
	while (1) {
		if ((N % K) == 0) {
			printf("결과: %d", i);
			exit(1);
		}
		else {
			int hi = 1;
			for (int k = 0; k < i; k++) {
				hi = hi * 10;
			}
			mult += hi;

			N = n;
			N = N * mult;
			printf("%d mult: %d N: %d\n\n", i, mult, N);
			i++;
		}
	}
	/*
	N * 11 (10 + 1)
	N * 111 (100 + 10 + 1)
	N * 1111 (1000 + 100 + 10 + 1)
	*/
}

 

시간초과 코드 2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 몇 자리 수인지 세는 함수
int digit(int n) {
	int cnt = 0;
	while (1) {
		n = n / 10;
		cnt++;
		if (n <= 0) break;
	}
	return cnt;
}

int main(void) {
	int N, K;
	scanf("%d %d", &N, &K);
	int originalN = N;

	int remainder;		// 나머지
	int cnt = 0;		// 몇 개의 숫자를 이어붙여야 나누어 떨어지는지

	int mult = (int)(pow(10, digit(N)));
	printf("mult: %d\n", mult);

	while (remainder != 0) {
		remainder = N % K;
		cnt++;
		if (remainder == 0) {
			printf("%d", cnt);
			break;
		}
		else {
			N = remainder * mult + originalN;
		}
	}
}

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAX 5001
#define MALLOC(p,s)\
	if( ! ( (p) = malloc(s) ) ) { \
		fprintf(stderr, "Insufficient memory!"); \
		exit(EXIT_FAILURE); \
	}


typedef struct node* nodePointer;
typedef struct node {
	int data;
	nodePointer next;
} node;

void initLinkedList(nodePointer first) {
	first->next = NULL;
}

void addList(nodePointer first, nodePointer now) {
	if (first->next == NULL) { // 첫 번째 노드가 NULL 이면
		now->next = first->next;
		first->next = now;
	}
	else { // 첫 번째 노드 앞에 삽입
		now->next = NULL;
		first->next = now->next;
		now->next = first;
	}
}
nodePointer findLastNode(nodePointer first) {
	nodePointer curr = first->next; //순회용 노드 생성
	while (curr->next != NULL) {
		curr = curr->next;
	}
	return curr;
}

nodePointer printLinkedList(nodePointer first) {
	nodePointer curr = first->next; //순회용 노드 생성
	while (curr->next != NULL) {
		printf("%d\n", curr->data);
		curr = curr->next;
	}
	printf("%d\n", curr->data);

}

int main(void) {
	nodePointer head2, nodeA, nodeB, nodeC;
	MALLOC(head2, sizeof(node));
	MALLOC(nodeA, sizeof(node));
	MALLOC(nodeB, sizeof(node));
	MALLOC(nodeC, sizeof(node));
    
	nodeA->data = 111;
	nodeB->data = 222;
	nodeC->data = 333;

	initLinkedList(head2); // 연결리스트 초기화
	addList(head2, nodeA);
	addList(nodeA, nodeB);
	addList(nodeB, nodeC);

	nodeA->next = nodeB->next;
	free(nodeB);
	printLinkedList(head2);


	free(head);
	for (i = 0; i < N; i++) {
		free(nodes[i+1]);
	}

	return 0;
}

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAX 5001
#define MALLOC(p,s)\
	if( ! ( (p) = malloc(s) ) ) { \
		fprintf(stderr, "Insufficient memory!"); \
		exit(EXIT_FAILURE); \
	}


typedef struct node* nodePointer;
typedef struct node {
	int data;
	nodePointer next;
} node;

int main(void) {
	nodePointer head, node1, node2;

	MALLOC(head, sizeof(node));
	MALLOC(node1, sizeof(node));
	MALLOC(node2, sizeof(node));

	node1->data = 10;
	node2->data = 20;

	head->next = NULL;
	node1->next = head->next;
	head->next = node1;

	node2->next = node1->next;
	node1->next = node2;


	nodePointer curr = head->next; //순회용 노드 생성
	while (curr != NULL) {
		printf("%d\n", curr->data);
		curr = curr->next;
	}

	free(head);
	free(node1);
	free(node2);

	return 0;
}

 

결과

10

20

 

일반적인 가정에서 하는 네트워크 구성

 

네트워크는 크게 랜과 왠으로 나눌 수 있는데

집에서 구성하는 네트워크는 랜 (좁은 범위)

 

인터넷을 사용하려면 가장 먼저 결정해야하는 것은?

인터넷 서비스 사용자 (ISP)

인터넷 회선 (광랜, 2018년 6월) 이다.

 

인터넷을 개통할 때 결정해야할 두 가지는?

인터넷 서비스 사용자 (ISP)와

인터넷 회선, 두 가지를 결정해야 한다.

 

 

가정에서 네트워크를 구성하려면 필요한 장비란?

인터넷 서비스 제공자와 네트워크를 연결하기 위해 필요한 장비가 있다.

> 인터넷 공유기 라는 장비

 

 

인터넷 공유기 (Broadband Router, 라우터)란?

가정이나 소규모 기업에서 인터넷에 접속할 때 쓰인다.

가정용으로 만든 라우터.

라우터 기능 뿐만 아니라, 허브, 스위칭 허브, 방화벽 같은 다양한 기능도 제공 (최근)

 

 

인터넷 공유기를 중심으로

내부 인터넷망(사설망)을 구성하고

다양한 기기를 연결

 

연결방식 2가지

크게 유선과 무선연결로 나누는데

유선 랜: 랜 케이블이 필요하면 유선 연결

무선 랜: 랜 케이블이 필요하지 않으면 무선연결

 

보통 무선 랜 공유기를 두고

컴퓨터는 유선으로 연결하고

스마트폰이나 프린터는 무선 연결하는 식으로..

 

 

 

 

 

네트워크의 범위: 랜(LAN)과 왠(WAN)

 

네트워크는 접속할 수 있는 범위에 따라

두 가지 종류로 나눌 수 있다.

 

랜(LAN)이란?

건물 안이나 특정 지역을 범위로 하는 네트워크

가정이나 빌딩 안에 있는 사무실 처럼

지리적으로 제한된 곳에서 컴퓨터와 프린터를 연결할 수 있는 네트워크

컴퓨터가 두 대만 연결되어 있어도 랜이다.

 

왠(WAN)이란?

지리적으로 넓은 범위에 구축된 네트워크

인터넷 서비스 제공자 (ISP: Internet Service Provider)가

제공하는 서비스를 사용하여 구축된 네트워크

랜과 랜을 연결하는 것으로 생각해도 된다.

LAN -- WAN -- LAN

 

ISP란?

KT, U+, SK브로드밴드 등

인터넷 상용 서비스 사업을 하고 있는 사업자

 

 

 
범위 좁다 (건물/특정지역) 넓다 (랜과 랜을 연결)
속도 빠르다 느리다
오류 적다 많다

 

랜 (LAN)의 특징?

연결하는 거리가 짧아서

신호가 약해지거나 오류가 발생할 확률이 낮다.

거리가 짧기 때문에 속도가 빠르다

 

왠 (WAN)의 특징?

멀리 떨어져 있는 랜과 연결되어 있어서

신호가 약해지거나 오류가 발생할 확률이 높다.

거리가 길기 때문에 속도가 느리다

 

 

인터넷의 시작 (역사)

미국 국방부의 ARPA에서 군사 목적으로 컴퓨터 네 대를 연결한 것이 인터넷의 시작

ARPA 네트워크 (줄여서 알파넷)

<설명>

MainActivity.kt 에서 버튼을 누르면

SubActivity.kt 에서 웹뷰를 보여준다

 

<구현영상>

웹뷰 불러오는데 시간이 조금 걸립니다

 

<순서>

1. 매니패스트 파일 수정

2. MainActivity.kt / activity_main.xml 작성

3. SubActivity.kt / activity_sub.xml 작성

 


1.  AndroidManifest.xml 파일에

코드 두 줄을 추가한다.

package="com.example.webuttonswitch">

<uses-permission android:name="android.permission.INTERNET" /> <!-- 추가: 인터넷 연결 허가 -->

<application
	...
    android:usesCleartextTraffic="true"> <!-- 추가: 모든 cleartext 트래픽 허용처리 -->

 

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.webuttonswitch">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication"
        android:usesCleartextTraffic="true">

    <activity
            android:name=".SubActivity"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 


2-1.

MainActivity.kt

class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnStart1.setOnClickListener{
            val intent: Intent = Intent(this, SubActivity::class.java)
            startActivity(intent)
        }


    }
}

 

2-2.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Main Activity"
        android:layout_gravity="center"
        android:textSize="30sp"/>

    <Button
        android:id="@+id/btnStart1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="START_ACTIVITY" />


</LinearLayout>

 


3-1.

SubActivity.kt

class SubActivity : AppCompatActivity() {
    lateinit var binding: ActivitySubBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySubBinding.inflate(layoutInflater)
        setContentView(binding.root)

        var myWebView: WebView = findViewById(R.id.webview)
        myWebView.webViewClient = WebViewClient()
        myWebView.loadUrl("https://google.com/")

    }
}

 

 

3-2.

activity_sub.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

'잡동사니 > [2022] 회로이론' 카테고리의 다른 글

[04] 가정에서 하는 랜 구성  (0) 2022.12.09
[03] 랜(LAN)/ 왠(WAN)  (0) 2022.12.09
[02] 비트/바이트  (0) 2022.12.09
[01] 네트워크와 패킷  (0) 2022.12.09
환영합니다!  (0) 2021.05.16

 정보의 양을 나타내는 단위: 비트 (bit), 바이트 (byte)

 

디지털 데이터 (digital data)란?

모든 컴퓨터는 숫자 0과 1만을 다루는데,

그 0과 1의 집합을 디지털 데이터라고 한다.

 

0과 1이 많이 모여서 사진을 나타낼 수 있다.

 

비트 (bit)란?

0과 1 의 정보를 나타내는 최소 단위

 

바이트 (byte)란?

0 또는 1인 숫자 8개

1 byte = 8 bit

컴퓨터는 기본적으로 바이트 단위로 데이터를 읽고 쓰는 작업을 한다.

 

 

컴퓨터가 0과 1 만을 인식할 수 밖에 없다면

우리는 키보드로 어떻게 문자를 입력할 수 있을까?

숫자와 문자의 대응표를 미리 만들어놓았다

아스키 코드 (ASCII 코드)

A/a = 95

B/b = 96 ...

 

문자 데이터도 패킷으로 나누어서 네트워크에 전송하면 된다.

 

 

네트워크에 데이터를 전송하는 경우에

비트 정보를 전기 신호로 변환하기 때문에

실제로는 네트워크에 전기 신호가 전송되고 있다.

 

0과 1의 형태 그대로 전송되고 있는 것이 아님

 

'잡동사니 > [2022] 회로이론' 카테고리의 다른 글

[04] 가정에서 하는 랜 구성  (0) 2022.12.09
[03] 랜(LAN)/ 왠(WAN)  (0) 2022.12.09
[Kotlin] 버튼 누르면 웹뷰 액티비티 띄우기  (0) 2022.12.09
[01] 네트워크와 패킷  (0) 2022.12.09
환영합니다!  (0) 2021.05.16

+ Recent posts