박력돌이

wooristar.egloos.com

포토로그


애드센스와이드


1193번 분수찾기 백준코딩

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

1/11/21/31/41/5
2/12/22/32/4
3/13/23/3
4/14/2
5/1

이와 같이 나열된 분수들을 1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.


착안점:

1 | 2 3 | 4 5 6 | 7 8 9 10 | 11 12 13 14 15 |...

1/1 | 1/2 2/1 | 3/1 2/2 1/3 | 1/4 2/3 3/2 4/1 | 5/1 4/2 3/3 2/4 1/5 |...

11 | 12 21 | 31 22 13 | 14 23 32 41 | 51 42 33 24 15 |...

1 | 2 | 3 | 4 | 5 |...


입력값에 -1, -2, -3 ... 으로 진행하면서 카운팅을 하고 입력값이 0보다 작아지면 while문을 종료함

구해진 cnt로 그룹 내부에서의 순서를 다시 구함

이후 cnt 값으로 mod연산하여 홀,짝수를 구함 (홀수-분자가 큼, 짝수-분모가 큼)

if문으로 내부순서에 부합하는 시점에 printf문으로 ?/?를 출력함

분자,분모는 소스코드와 같이 구현하여 출력.




2292번 벌집 백준코딩

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

아이디어
1                   - 1개
2,3,4,5,6,7        - 6개 (+6)
8, ... ,19          - 12개 (+6)
20, ... ,37         -18개 (+6)
38, ... , 61        - 24개 (+6)
...

따라서, 6n+1의 등차수열로 간소화 할 수 있음.

주어진 입력 숫자에 위 등차 수열의 값을 지속적으로 빼주면서 cnt++을 해주면 몇 개를 거치는지 구해낼 수 있음.

단, 입력값이 1인 경우를 고려해야 함.

소스코드는 아래와 같음





 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

// 2292번 벌집
int main() {
int n = 0, answer = 0;
scanf("%d", &n);

if (n == 1) {
answer++;
}
else if (n > 1) {
while (n > 0) {
if (n == 1) {
break;
}
else if (n > 1) {
n = n - 6 * answer;
}
answer++;
}
}
printf("%d\n", answer);

return 0;

}


1316번 그룹 단어 체커 백준코딩



 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <string.h> // strcpy_s() strlen()
#include <stdbool.h>

_Bool workCheck(char str[]);

int main() {
// 1316번 그룹 단어 체커
int count = 0, n = 0;
scanf("%d", &n);
char str[100] = { "\0", };

for (int i = 0; i < n; i++) {
scanf("%s", &str);
if (workCheck(str)) {
count++;
}
}
printf("%d", count);

return 0;
}

_Bool workCheck(char str[]) {
_Bool alphabet[26] = { false }; //알파벳 개수 만큼 배열 만듬. 단어에 글자 사용 여부 확인 인덱스

for (int i = 0; i < strlen(str); i++) {
if (alphabet[str[i] - 'a']) {
return false;
}
else {
char tmp = str[i];
alphabet[str[i] - 'a'] = true;

while (1) {
if (tmp != str[++i]) {
i--;
break;
}
}
}
}
}



5622번 다이얼 백준코딩

0,1은 무시
입력 받을 문자열 배열은 15개의 글자수로 제한


#include <stdio.h>

int main(){
int i, time = 0, result = 0;
char input[15] = { "\0", };

scanf("%s", &input);

for (i = 0; i < strlen(input); i++) {
if (input[i] == 'A' || input[i] == 'B' || input[i] == 'C') {
time = 3;
}
else if (input[i] == 'D' || input[i] == 'E' || input[i] == 'F') {
time = 4;
}
else if (input[i] == 'G' || input[i] == 'H' || input[i] == 'I') {
time = 5;
}
else if (input[i] == 'J' || input[i] == 'K' || input[i] == 'L') {
time = 6;
}
else if (input[i] == 'M' || input[i] == 'N' || input[i] == 'O') {
time = 7;
}
else if (input[i] == 'P' || input[i] == 'Q' || input[i] == 'R' || input[i] == 'S') {
time = 8;
}
else if (input[i] == 'T' || input[i] == 'U' || input[i] == 'V') {
time = 9;
}
else if (input[i] == 'W' || input[i] == 'X' || input[i] == 'Y' || input[i] == 'Z') {
time = 10;
}
result += time;
}

printf("%d\n", result);

return 0;
}


온라인 저지를 풀면서 자주 틀리는 것 모음 백준코딩

백준코딩, 프로그래머스 등을 풀면서 자주 틀리는 것들을 정리해본다.

char *a 정의 시 해당 변수는 고정되어 이후 내부 배열을 수정할 수 없음에 유의할 것.
코드 내부에서 수정을 원한다면 char a[] = "{"\0";}; 형태로 정의해야 한다.



2908번 상수 백준코딩






#include <stdio.h>

int main(){

int i, input[2] = { 0, }, output[2] = { 0, }, result = 0;

for (i = 0; i < 2; i++) {
scanf("%d", &input[i]);
}

for (i = 0; i < 2; i++) {
output[i] = input[i] / 100 + input[i] % 100 / 10 * 10 + input[i] % 100 % 10 * 100;
if (output[i] > result) {
result = output[i];
    }
}

printf("%d", result);

    return 0;
}


NAS VPN L2TP 설정 삽질 정리 IT,핸드폰

설정은 구글링 검색으로 했고, 안드로이드 폰에서는 잘 되었음 (갤럭시 s10e,, 갤노트 10.1 2014)

문제는 무슨 짓을 해도 내 랩탑에서 안됨(win 10 pro 정품)

그래서, 오만 삽질을 다하는 중인데 일단 다른 랩탑 (win 7)에서는 아래와 같이 설정해서 일단 되는걸 확인


윈10에서는 L2TP는 안됨.

OPENVPN은 잘되었음.

그래서 현재는 OPENVPN을 사용 중...

아두이노 블루투스 쉴드 V2.2 사용 방법 정리


1. 쉴드 설정 (시리얼 통신으로 커맨드 직접 전송)
- 포트는 TX D1, RX D0으로 맞춘다. (아래 참조)
XOOOOO TX
XOOOOO D0 D1 D4 D5 D5 D7
XOOOOO RX

- 아두이노를 열어 빈 스케치를 쓰기한다. (중요)
- 시리얼 통신 가능한 터미널 프로그램을 연다
- 통신 속도는 반드시 38400bps로 한다. (중요)
- 그외 통신 설정은 기본 설정대로 유지한다.
- 아누이노 pdf 매뉴얼을 열어서 명령을 보낸다.
- 대표적인 명령
Command Respond
AT\r\n OK
AT+RESET\r\n OK
AT+VERSION?\r\n +VERSION:2.0-20100601

- 시리얼 통신 사례
AT+ADDR? +ADDR:2015:5:60531 OK
AT+NAME? +NAME:H-C-2010-06-01 OK
AT+ROLE? +ROLE:0 OK
AT+ORGL OK
AT+PSWD? +PSWD:1234
AT+BIND? +BIND:0:0:0

2. 블루투스 통신을 위한 쉴드 설정 (참고 사이트 : deneb21.tistory.com/267)
-포트는 TX D4, RX D5로 맞춘다. (아래 참조)
ㅁOXOOO TX
ㅁOXXOO D0 D1 D4 D5 D5 D7
ㅁOOXOO RX

- 소스코드 적용 시 블루투스 시리얼 통신속도는 38400bps로 맞추고 포트는 위에 설정한대로 D4,D5로 한다.
D0, D1을 선택하면 아두이노 시리얼통신 Tx,Rx와 충돌이 나서 NG 발생된다.

3. 팁
- 스마트폰과 블루투스 쉴드가 잘 안붙으면 시리얼 통신으로 연결하여 AT+ORGL해서 초기화 해주면 잘 된다.

CS0029 암시적으로 'string'형식을 'System.Windows.Forms.Label' 형식으로 변환할 수 없습니다. C#

현상: 제목의 에러가 발생

원인: Name이라는 이름의 레이블을 만들었는데 이것과 폼의 이름인 this.Name 과 해당 항목간 충돌 발생으로 에러 발생

조치: 기존 Name Label관련 내용을 From1.Designer.cs에서 삭제 또는 주석 처리

코드:
            this.Controls.Add(this.Name); //주석처리 필요
            this.Controls.Add(this.ListViewSetting);
            this.Name = "frmMain"; //에러 발생 부위
            this.Text = "XXXXX_TEST_C#";
            this.ResumeLayout(false);
            this.PerformLayout();

...

        #endregion

        private System.Windows.Forms.ListView ListViewSetting;
        private System.Windows.Forms.Label Name; //충돌의 원인으로 주석 처리
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;

...

            // 
            // Name // 에러 유발자
            // 
            this.Name.AutoSize = true;
            this.Name.Location = new System.Drawing.Point(300, 12);
            this.Name.Name = "Name";
            this.Name.Size = new System.Drawing.Size(39, 12);
            this.Name.TabIndex = 2;
            this.Name.Text = "Name";
            // 

...

        private void InitializeComponent()
        {
            this.ListViewSetting = new System.Windows.Forms.ListView();
            this.Name = new System.Windows.Forms.Label(); //주석처리 필요. 다른 것들 주석처리하고 이걸 놔두면 CS0029재발
            this.label1 = new System.Windows.Forms.Label();

[YOLO] Darknet 빌드 시 LNK2001 cudnn_convolutional_setup 외부 기호를 확인할 수 없습니다. 오류 조치 딥러닝(YOLO)

LNK2001 cudnn_convolutional_setup 외부 기호를 확인할 수 없습니다.
위 내용은 convolutional_layer.c와 연관 있음.

해당 파일 오픈 시 문제점이 2개 나옴
1)
#ifndef AI2
#define AI2 0
void forward_xnor_layer(layer l, network_state state); //함수 정의 없음
#endif

2)
    cudnnSetConvolution2dDescriptor(l->convDesc, l->pad, l->pad, l->stride, l->stride, 1, 1, CUDNN_CROSS_CORRELATION); //함수 호출에 인수가 너무 적습니다.

이로 인해 실행이 안됨, 그중 2번째 문제를 해결해야할 것으로 보임.

//cudnn.h에 정의된 cudnnSetConvolution2dDescriptor 함수 정의

cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
                                                             int pad_h,    // zero-padding height
                                                             int pad_w,    // zero-padding width
                                                             int u,   // vertical filter stride
                                                             int v,   // horizontal filter stride
                                                             int dilation_h, // filter dilation in the vertical dimension
                                                             int dilation_w, // filter dilation in the horizontal dimension
                                                             cudnnConvolutionMode_t mode,
                                                             cudnnDataType_t computeType
                                                           );

2번의 문제점을 해결하고자 구글링한 결과 아래와 같이 식을 변경

    cudnnSetConvolution2dDescriptor(l->convDesc, l->pad, l->pad, l->stride, l->stride, 1, 1, CUDNN_CROSS_CORRELATION, dataType<Dtype>::type);

출처) https://github.com/MhLiao/TextBoxes_plusplus/pull/6/commits/519ad726b9cb2a4f37eb5b0ea59d715003dc5c8a
하지만, 이건 단순 정의라서 다시 아래와 같이 수정


cudnnSetConvolution2dDescriptor(l->convDesc, l->pad, l->pad, l->stride, l->stride, 1, 1, CUDNN_CROSS_CORRELATION, CUDNN_DATA_FLOAT);
https://github.com/pjreddie/darknet/pull/67/files

위와 같이 수정-CUDNN_DATA_FLOAT 를 매개변수 추가 - 하여 정상 빌드됨을 확인함



1 2 3 4 5 6 7