오늘 갑자기 외부에서 DDNS 주소로 Synology 접속이 되지 않았다.

 

로컬 네트워크로 접속을 해보니 Synology 에 부여된 IP 가 변경된 것으로 확인.. 

 

공유기에 설정해둔 포트포워딩을 바꿔주고, Synology IP 가 변경되지 않도록 정적 IP 로 변경 하였다.

 

변경 경로 : 제어판 - "네트워크" - "네트워크 인터페이스" - LAN 포트 1 편집 - [수동 구성 이용]

 

NAS 를 가족들이 접속 하다 보니.. 또 이런 일이 벌어지지 않도록 변경 하였다 ㅎㅎ

LGU+ 로 통신사 변경을 하면서 공유기를 변경하게 되었다.

 

변경 후 시놀로지 연동 했던 히스토리를 입력 한다.

 

인터넷 속도도 500MB로 변경하면서 기존 사용하던 자체 공유기가 지원을 못하는 것으로 보여.. 사용하지 않는 것으로 결정.

 

기존 연결 셋팅

인터넷 -> 통신사 공유기 -> 자체 공유기 -> NAS

 

변경 연결 셋팅

인터넷 -> 통신사 공유기 -> NAS

 

기존, 자체 공유기를 사용할 때 통신사 공유기를 "브릿지 모드"로 사용했지만, 자체 공유기를 제거하면서 기존 설정에서 "외부 (LTE, 5G)" 에서 접속이 가능하도록 설정이 필요했다..

 

구글링 해보니 유플러스 공유기 Admin 에 접속해서 Super DMZ 설정을 하라는 설명이 많았지만, 외부 (LTE) 에서 공인 IP 나 DDNS 로 접속이 안되는 것을 확인...

 

Super DMZ 가 아닌 그냥 "DMZ 사용" 으로 설정하고, 내부에서 사용하는 포트들을 포트포워딩에 등록해보니, 외부 (LTE) 환경에서 xxx.synology.me 로 접속되는 것을 확인 !

 

끝!

문제

주몽은 철기군을 양성하기 위한 프로젝트에 나섰다. 그래서 야철대장에게 철기군이 입을 갑옷을 만들라고 명령했다. 야철대장은 주몽의 명령에 따르기 위해 연구에 착수하던 중 갑옷을 만드는 재료들은 가각 고유한 번호가 있고, 갑옷은 2개의 재료로 만드는 데 2가지 재료의 고유한 번호를 합쳐 M (1 <= M <= 10,000,000)이 되면 갑옷이 만들어진다는 사실을 발견했다. 야철대장은 자신이 만들고 있는 재료로 갑옷을 몇 개나 만들 수 있는지 궁금해졌다. 야철대장의 궁금증을 풀어 주기 위해 N (1 <= N <= 15,000)개의 재료와 M이 주어졌을 때 몇 개의 갑옷을 만들 수 있는지를 구하는 프로그램을 작성하시오.

 

입력

1번째 줄에 재료의 개수 N (1 <= N <= 15,000), 2번째 줄에 갑옷을 만드는 데 필요한 수 M(1 <= M <= 10,000,000)이 주어진다. 3번째 줄에는 N개의 재료들이 가진 고유한 번호들이 공백을 사이에 두고 주어진다. 고유한 번호는 100,000보다 작거나 같은 자연수다.

 

출력

1번째 줄에 갑옷을 만들 수 있는 개수를 출력한다.

 

예제 입력 1

6	// 재료의 개수
9	// 갑옷이 완성되는 번호의 합
2 7 4 1 5 3	// 재료들

 

예제 출력 1

2

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class P1940_주몽의명령 {
	
	public static void main(String[] args) throws IOException {
    
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int N = Integer.parseInt(br.readLine());        
        int M = Integer.parseInt(br.readLine());
        
        int[] A = new int[N];
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        for(int i = 0; i < N; i++){
        	A[i] = Integer.parseInt(st.nextToken());
        }
        
        Arrays.sort(A);
        
        int st_index = 0;
        int ed_index = N - 1;
        int count = 0;
        
        while(st_index < ed_index){
        
        	if(A[st_index] + A[ed_index] < M){
            	st_index++;
            
            } else if(A[st_index] + A[ed_index] > M){
            	ed_index--;
            
            } else {
            	count++;
                st_index++;
                ed_index--;
            }
        
        }    
    }    
}

 

투 포인터 이동 원칙으로 접근하면 된다.

'일상이야기 > 알고리즘' 카테고리의 다른 글

(4) 연속된 자연수의 합 구하기  (0) 2022.04.18
(3) 구간 합 구하기  (0) 2022.04.13
(2) 평균 구하기  (0) 2022.04.13
(1) 숫자의 합  (0) 2022.04.13
알고리즘 스터디 시작  (0) 2022.04.12

어떠한 자연수 N은 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1<=N<=10,000,000)을 몇 개의 연속된 자연수의 합으로 나타내는 가짓수를 알고 싶다. 이때 사용하는 자연수는 N 이여야 한다. 예를 들어 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5 이다. 반면, 10을 나타내는 방법은 10, 1+2+3+4이다. N을 입력받아 연속된 자연수의 합으로 나타내는 가짓수를 출력하는 프로그램을 작성하시오.

 

입력

1번째 줄에 정수 N이 주어진다.

 

출력

입력된 자연수 N을 연속된 자연수의 합으로 나타내는 가짓수를 출력한다.

 

예제 입력 1

15 // N

 

예제 출력 1

4

 

코드

import java.util.Scanner;

public class P2018_연속된자연수의합 {
	
	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		
		int count = 1;
		int start_index = 1;
		int end_index = 1;
		int sum = 1;
		
		while(end_index != N) {
			
			if(sum == N){
				count++;
				end_index++;
				sum = sum + end_index;
			
			} else if(sum > N){
				sum = sum - start_index;
				start_index++;
			
			} else {
				end_index++;
				sum = sum + end_index;
			}
			
		}
		System.out.println(count);
		
	}
}

 

투 포인터 이동 원칙을 이용해서 접근하면 되는 문제이다.

1~15 을 1번째부터 start_index, end_index 로 시작하고, sum 이 15가 될 때까지 end_index 를 이동시키고, 15가 되는 경우 start_index를 이동한다.

start_index -->
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
end_index -->

 

투 포인터 이동 원칙

sum > N : sum = sum - start_index; start_index++;

sum < N : end_index++; sum = sum + end_index;

sum == N : end_index++; sum = sum + end_index; count++;

 


Reference

백준의 올라인 저지 2018번

'일상이야기 > 알고리즘' 카테고리의 다른 글

(5) 주몽의 명령  (0) 2022.04.18
(3) 구간 합 구하기  (0) 2022.04.13
(2) 평균 구하기  (0) 2022.04.13
(1) 숫자의 합  (0) 2022.04.13
알고리즘 스터디 시작  (0) 2022.04.12

문제

수 N 개가 주어졌을 때 i 번째 수에서 j 번째 수까지의 합을 구하는 프로그램을 작성하시오

 

입력

1번째 줄에 수의 개수 N (1~100,000), 합을 구헤야 하는 횟수 M(1~100,000), 2번째 줄에 N개의 수가 주어진다. 각 수는 1,000 보다 작거나 같은 자연수다. 3번째 줄부터는 M개의 줄에 합을 구해야 한느 구간 i와 j가 주어진다.

 

출력

총 M개의 줄에 입력으로 주어진 i 번째 수에서 j 번째 수까지의 합을 출력한다.

 

예제 입력

5 3		//데이터의 개수, 질의 개수
5 4 3 2 1	//구간 합을 구할 대상 배열
1 3
2 4
5 5

예제 출력

12
9
1

 

먼저, 합의 배열을 만들자.

 

A : 보기 배열

S : 합 배열

 

S[ i ] = S[ i -1 ] + A [ i ]

 

구간 i ~ j 를 구하는 구간 합 공식으로 정답을 출력하자.

 

공식 : S[ j ] - S[ i - 1]

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class P11659_구간합구하기 {
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
		
		int suNo = Integer.parseInt(stringTokenizer.nextToken());
		int quizNo = Integer.parseInt(stringTokenizer.nextToken());
		
		long[] S = new long[suNo+1];
		
		stringTokenizer = new StringTokenizer(bufferedReader.readLine());
		
		for(int i = 1; i <= suNo; i++){
			S[i] = S[i-1] + Integer.parseInt(stringTokenizer.nextToken());
		}
		
		for(int q = 0; q < quizNo; q++) {
			
			stringTokenizer = new StringTokenizer(bufferedReader.readLine());
			
			int i = Integer.parseInt(stringTokenizer.nextToken());
			int j = Integer.parseInt(stringTokenizer.nextToken());
			
			System.out.println(S[j]-S[i-1]);
			
		}
	}
}

 


Reference

백준 온라인 저지 11659번

 

'일상이야기 > 알고리즘' 카테고리의 다른 글

(5) 주몽의 명령  (0) 2022.04.18
(4) 연속된 자연수의 합 구하기  (0) 2022.04.18
(2) 평균 구하기  (0) 2022.04.13
(1) 숫자의 합  (0) 2022.04.13
알고리즘 스터디 시작  (0) 2022.04.12

문제

세준이는 기말고사를 망쳤다. 그래서 점수를 조작해 집에 가져가기로 결심했다. 일단 세준이는 자기 점수 중 최댓값을 골랐다. 그런 다음 최댓값을 M이라 할 때 모든 점수를 점수/M * 100 으로 고쳤다. 예를 들어 세준이의 최고점이 70점, 수학 점수가 50점이라면 수학 점수는 50/70 * 100이므로 71.43점이다. 세준이의 성적을 이 방법으로 계산했을 때 새로운 평균을 구하는 프로그램을 작성하시오.

 

입력

1번째 줄에 시험을 본 과목의 개수 N 이 주어진다. 해당 값은 1,000보다 작거나 같다. 2번째 줄에 세준이의 현재 성적이 주어진다. 해당 값은 100보다 작거나 같은, 음이 아닌 정수이고, 적어도 1개의 값은 0보다 크다.

 

출력

1번째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값이 절대 오차 또는 상대 오차가 10^-2 이하이면 정답이다.

 

예제 입력

3
10 20 30

예제 출력

66.666666667

 

문제 분석

변환 점수의 평균을 구하는 식(점수가 A,B,C 인 경우)

(A/M * 100 + B/M * 100 + C/M * 100) / 3 = (A+B+C)*100/M/3

 

코드

import java.util.Scanner;

public class P1546_평균 {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int A[] = new int[N];
		for(int i = 0; i < N; i++){
			A[i] = sc.nextInt();
		}
		
		long sum = 0;
		long max = 0;
		
		for(int i = 0; i < N; i++){
			if(A[i] > max){
				max = A[i];
			}
			sum += A[i];
		}
		
		System.out.println(sum*100.0/max/N);
		
	}
}

 

결과

 

Reference

백준 온라인 저지 1546번

'일상이야기 > 알고리즘' 카테고리의 다른 글

(5) 주몽의 명령  (0) 2022.04.18
(4) 연속된 자연수의 합 구하기  (0) 2022.04.18
(3) 구간 합 구하기  (0) 2022.04.13
(1) 숫자의 합  (0) 2022.04.13
알고리즘 스터디 시작  (0) 2022.04.12

문제

N 개의 숫자가 공백 없이 써 있다. 이 숫자를 모두 합해 출력하는 프로그램을 작성하시오.

 

입력

1번째 줄에 숫자의 개수 N(1 <= N <= 100), 2번째 줄에 숫자 N 개가 공백 없이 주어진다.

 

출력

입력으루 주어진 숫자 N 개의 합을 출력한다.

 

예제 입력 1

1 // 숫자의 개수
54321 // 공백 없이 주어진 N 개의 숫자

예제 출력 1

15

 

코드

import java.util.Scanner;

public class P11720_숫자의합 {
	
	public static void main(String[] args) {		
		
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		
		String sNum = sc.next();
		char[] cNum = sNum.toCharArray();
		int sum = 0;
		for (int i = 0; i < cNum.length; i++){
			sum += cNum[i] - '0';
		}
		
		System.out.println(sum);
	}
}

 

결과

Console 결과

 

Reference

백준 온라인 저지 11720번

 

 

'일상이야기 > 알고리즘' 카테고리의 다른 글

(5) 주몽의 명령  (0) 2022.04.18
(4) 연속된 자연수의 합 구하기  (0) 2022.04.18
(3) 구간 합 구하기  (0) 2022.04.13
(2) 평균 구하기  (0) 2022.04.13
알고리즘 스터디 시작  (0) 2022.04.12

자기개발로 알고리즘 공부를 시작해려고 한다.

 

큰 맘 먹고 알고리즘 코딩 테스트 책을 샀는데....(굳이 필요했을까? 라는 생각도 들지만.. 한 권 있으면 좋으니까 ㅎㅎ)

 

취준할 때는 백준 사이트를 애용했었는데, 요즘에는 다른 곳도 많이 사용하는 것 같다.

 

기업에서 코딩 테스트로 이용할 수 있는 사이트도 많이 생긴 것 같다.

 

이 책에 있는 내용을 한 바퀴 쭉 돌고, 여러 사이트를 돌면서 스스로 풀어봐야겠다.

 

그럼 시작~~

 

'일상이야기 > 알고리즘' 카테고리의 다른 글

(5) 주몽의 명령  (0) 2022.04.18
(4) 연속된 자연수의 합 구하기  (0) 2022.04.18
(3) 구간 합 구하기  (0) 2022.04.13
(2) 평균 구하기  (0) 2022.04.13
(1) 숫자의 합  (0) 2022.04.13

NAS 초기 설정 중 겪은 어려웠던 내용을 공유해본다.

 

현재 집의 네트워크 구조는 아래와 같다.

인터넷 ---> SK브로드밴드 모뎀 ---> 무선공유기 ---> NAS

 

NAS 설치 후 초기 셋팅을 완료하고 동일한 네트워크 망에서는 잘 접속이 되는 것을 확인하였다.

근데 NAS 를 집에서만 접속해서 사용할 수만은 없는 것이기에.. 외부망에서 접속을 원했다!!

유튜브를 굉장히 많이 검색했고.. 열심히 따라했지만.. 결국 접속이 안됨..ㅜㅜ

결국 SK브로드밴드 모뎀이 문제인가.. 구글링을 시작했고.. 해답(?)을 찾았다.

이것이 정확한 답인지는 모르겠으나, 이렇게 해서 NAS 를 외부에서 접속 가능해졌다.

해답(?)

1. SK브로드밴드 모뎀에 접속한다. (접속 시 사용되는 계정은 모뎀에서 확인 가능)

2. WAN 메뉴로 이동한다.

3. 서비스모드를 NAT --> 브릿지로 변경한다.

 

이 작업만 완료한다고 해서 NAS 와 연결이 되는 것은 아니고, 무선공유기에서 포트포워딩을 해줘야 한다.

포트포워딩 하는 방법은 쉽게 검색해서 찾을 수 있다. 다음에 한번 설정 해둔 포트포워딩을 공유해보도록 하겠다.

또, https 를 사용하는 방법도 있는데 이것도 공유 해보도록 하겠다.

https 를 사용하면 인증서가 필요할텐데 이부분은 어떻게 적용이 되는 것인지도 한번 공유를 해보겠다~

 

끝!

 

Reference : https://badayak.com/3973

 

 

* 광고 아님.

* 내돈내산임.

 

휴대폰 사진이 늘어나면서 저장공간이 부족해.. Synology NAS 를 구매 함.

개인용으로 사용하기 좋다는 모델로 구매 함. 사이즈 딱 좋음.

  • NAS 모델 : 시놀로지 NAS 나스 DS220+ 
  • 하드 : 씨게이트 아이언울프 HDD 4TB (2개) --> Raid 로 사용하려고 2개 구매 함.
  • 구매일자: 2022년 2월 25일

구매하고 며칠 동안 설정한 내역들을 정리해보겠다. (사전에 유튜브 찾아보고.. 구글링을 많이 했었음..)

 

<사용 중인 인터넷 및 공유기 정보>

  • 인터넷: SK 브로드밴드
  • 공유기 : Netis

+ Recent posts