'분류 전체보기' 카테고리의 글 목록 (2 Page) :: 테크니션
반응형

불가피한 이유로 서버를 재기동 해야 하는 경우가 있다

이후에 curl, dig , nslookup 등 통신이 안되는 경우가 있는데

이럴 경우 DNS 서버 설정을 한번 봐야한다

1. resolv.conf 파일 편집 (전통적인 방법):

/etc/resolv.conf 파일은 리눅스 시스템에서 DNS 설정을 관리하는 데 사용됩니다. 다음은 이 파일을 편집하는 예시입니다.

sudo nano /etc/resolv.conf

파일을 열면 다음과 같은 내용이 있을 것입니다

nameserver 8.8.8.8
nameserver 8.8.4.4

이때 nameserver 뒤에 원하는 DNS 서버의 IP 주소를 추가하거나 변경합니다.

 

A클래스가 다를 경우 통신이 안되는 경우가 생깁니다

 

수정이 완료되면 저장하고 나갑니다.

 

nameserver ip는 별도로 확인이 필요합니다

 

 

2. systemd-resolved 사용 (systemd 기반 시스템):

systemd 기반의 리눅스 시스템에서는 systemd-resolved 서비스를 사용하여 DNS 설정을 관리합니다.

그러면 텍스트 편집기가 열리는데, 여기에 다음과 같은 내용을 추가하고 원하는 DNS 서버 주소를 설정합니다

[Resolve]
DNS=8.8.8.8

저장한 후 systemd-resolved 서비스를 재시작합니다.

sudo systemctl restart systemd-resolved

3. NetworkManager 사용:

많은 리눅스 배포판에서는 NetworkManager를 사용하여 네트워크 설정을 관리합니다.

nmcli connection modify "Wired Connection 1" ipv4.dns "8.8.8.8 8.8.4.4"

위 명령에서 "Wired Connection 1"은 네트워크 연결의 이름이며, 필요에 따라 수정하세요.

4. DHCP Client 설정 변경:

시스템이 DHCP를 통해 IP 주소 및 DNS 정보를 받는 경우, DHCP 클라이언트 설정을 변경하여 특정 DNS 서버를 사용할 수 있습니다.

/etc/dhcp/dhclient.conf 파일을 열고 다음과 같이 설정합니다:

supersede domain-name-servers 8.8.8.8, 8.8.4.4;

수정이 완료되면 DHCP 클라이언트를 재시작합니다.

sudo systemctl restart dhclient

모든 변경 사항을 적용한 후에는 DNS 설정이 변경되었는지 확인하기 위해 nslookup 또는 dig 같은 도구를 사용하여 테스트할 수 있습니다.

 
 
 
반응형
반응형

텍스트에서 찾기 및 바꾸기:

  • 편집하려는 셀을 선택한 후 "홈" 탭에서 "찾기 및 바꾸기"를 클릭합니다.
  • "찾기" 대화상자에서 Ctrl + J를 눌러 줄바꿈 문자를 입력합니다.
  • "바꾸기" 상자에 아무 것도 입력하지 않고 "모두 바꾸기"를 클릭합니다

반응형
반응형

구글 플레이앱스토어에 가끔 버전을 새로 업데이트 해야할 때가 있다

이렇게만 놔두면 앱 실행시 다시 구글플레이스토어로 돌아가는 현상이 생긴다

이를 해결하기 위해서는 

활성으로 바뀌고 나면 서버 안에서도 수정을 해줘야한다

mobilelogin.jsp 파일  \src\main\webapp\WEB-INF\jsp\mobile

반응형
반응형

저번에 크롤링으로 찾아서 했지만

API를 사용하면 더 빠르게 처리할 수있다

GPT 만세

1. https://www.juso.go.kr/addrlink/main.do 여기서 api 신청을 받아야됨

 

2. 7천건을 돌리려 햇더니 400정도에서 그만 하라고 서버측 부하 과다를 막기 위해 막음

 

3. 많이 돌리려면 크롤링이 나은거같음

import requests
import json

def search_address(api_key, keyword):
    url = "https://business.juso.go.kr/addrlink/addrLinkApiJsonp.do"
    params = {
        "currentPage": "1",
        "countPerPage": "1",
        "keyword": keyword,
        "confmKey": api_key,
        "resultType": "json",
        "hstryYn" :"N",
        "firstSort": "none",
        "addInfoYn": "Y"
    }

    # JSONP 요청을 보내기 위해 callback 파라미터를 지정합니다.
    params["callback"] = "callback"

    response = requests.get(url, params=params)

    # 응답을 JSONP 형식으로 받기 위해 callback 부분을 잘라냅니다.
    jsonp_data = response.text[response.text.find("(") + 1:response.text.rfind(")")]

    # JSON 형식으로 파싱합니다.
    result = json.loads(jsonp_data)

    if result.get("results"):
        address_info = result["results"]["juso"][0]
        return address_info
    else:
        return None


def main():
    api_key = ""
    keyword = "서귀포시 태평로 351"

    address_info = search_address(api_key, keyword)

    if address_info:
        print("주소:", address_info["roadAddr"])
        print("우편번호:", address_info["zipNo"])
        print("동사무소:", address_info["hemdNm"])
    else:
        print("주소 검색에 실패했습니다.")


if __name__ == "__main__":
    main()

반응형
반응형

우리나라 주소는 법정동과 행정동명 차이로 

주소에 나와있는 동과 동사무소가 다른 경우가 있다

이 경우에는

https://www.juso.go.kr/openIndexPage.do

여기에 들어가서 찾을 수 있다

답십리 래미안 관련 업무는 답십리1동에서 보는 것을 알 수 있다

매월동은 서창동으로 가야된다

주소 하나면 바로 검색을 하면 되는데

여러개를 일일히 치는 것 보다

파이썬에서 엑셀을 읽어서 검색 후 해당 관할동사무소를 다시 엑셀에 저장하는 코드로 

돌리는게 더 편할 것 같다

import time
from selenium import webdriver
import pandas as pd
from selenium.webdriver.common.by import By
import openpyxl


file_path = r'C:\Users\Administrator\Downloads\all_personn.xlsx'
sheet_name = 'Sheet1'

df = pd.read_excel(file_path, sheet_name=sheet_name)

data_list_juso = df["지번주소"].tolist()
driver= webdriver.Chrome()
dongsamuso=[]
for i in range(0,len(data_list_juso)):
    url = "https://www.juso.go.kr/support/AddressMainSearch.do?searchKeyword=&dsgubuntext=&dscity1text=&dscounty1text=&dsemd1text=&dsri1text=&dssan1text=&dsrd_nm1text=&aotYn=N"
    driver.get(url)
    time.sleep(0.1)
    driver.maximize_window()
    time.sleep(0.22)
    ddd = ' '.join(data_list_juso[i].split()[:3])
    #ddd = data_list_juso[i]
    # input_xpath = r'/html/body/div[4]/main/div/section[1]/div[1]/form/fieldset/div/div[1]/input[1]'
    input_xpath = r'/html/body/div[2]/div/main/div[1]/form/fieldset/div[1]/div[1]/div/input[1]'
    input_element = driver.find_element(By.XPATH, input_xpath)
    input_element.send_keys(ddd)
    time.sleep(0.2)
    button_xpath = r'/html/body/div[2]/div/main/div[1]/form/fieldset/div[1]/button'
    button_element = driver.find_element(By.XPATH, button_xpath)
    button_element.click()

    time.sleep(2)

    nbutton_xpath = r'#list1 > div.addrWrap > div.addAddr > a'
    nbutton_element = driver.find_element(By.CSS_SELECTOR, nbutton_xpath)
    nbutton_element.click()
    paegi = r'#list1'
    meeee = driver.find_element(By.CSS_SELECTOR, paegi).text.split('\n')
    k = list(meeee[1])[-1]
    if k == '지':
        anbutton_xpath = r' # list2 > div.addrWrap > div.addAddr > a'
        anbutton_element = driver.find_element(By.CSS_SELECTOR, nbutton_xpath)
        anbutton_element.click()

        text_xpath = r'#engAddr_2 > ul > li:nth-child(3) > span:nth-child(2)'
        text_element = driver.find_element(By.CSS_SELECTOR, text_xpath)
        text_value = text_element.text
        words = text_value.split()
        second_last_word = str(words[:-1])

    else:
        text_xpath = r'#engAddr_1 > ul > li:nth-child(3) > span:nth-child(2)'
        text_element = driver.find_element(By.CSS_SELECTOR, text_xpath)
        text_value = text_element.text

    words = text_value.split()
    second_last_word = str(words[:-1])
    dongsamuso.append(second_last_word)
    workbook = openpyxl.load_workbook(file_path)
    sheet_name = 'Sheet1'
    sheet = workbook[sheet_name]
    sheee_name = 'H'+str(i+2)
    sheet[sheee_name] = second_last_word
    workbook.save(file_path)

가끔 폐지라고 나오는 경우가 있는데 이에 대한 예외처리까지 담았다

반응형
반응형

리눅스 우분투를 gui로 볼 수 있는 xrdp 라는게 있다
이미 설치되어 있는데 가끔 안될때가 있다
그럴때는 재시작을 해주면 된다
ps -ef | grep  'xrdp'
pid 를 확인한다
service xrdp status
Active : active(running) 이라고 나오더라도 정상 작동하지 않는 경우가 있다
kill -9 pid (ex 29506)
모든 프로세스를. 강제 종료 후
service xrdp start
시작 후 로그인

반응형
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/43162

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

DFS로 작성하여 스택이 다 빠지면 1씩 반환하여 그 수를 세도록 만들었다

def solution(n, computers):
    answer = 0
    stakk = []
    visited = []

    def serch(computers):
        while stakk:
            visited.append(stakk.pop(-1))
            start = visited[-1]
            for i in range(n):
                if computers[start][i] == 1 and i not in visited and i not in stakk:
                    stakk.append(i)
                    computers[start][i] = 0
                    computers[i][start] = 0
            for i in visited:
                computers[i][i] = 0
        return 1

    for i in range(n):
        for j in range(n):
            if computers[i][j] == 1:
                stakk.append(i)
                answer += serch(computers)

    return answer

이렇게 하면 테스트케이스는 통과하는데 문제는 통과를 못한다

그래서 수정을 했다


def solution(n, computers):
    answer = 0
    stack = []
    visited = set()

    def search(computers):
        while stack:
            start = stack.pop()
            visited.add(start)
            for i in range(n):
                if computers[start][i] == 1 and i not in visited:
                    stack.append(i)
                    computers[start][i] = 0
                    computers[i][start] = 0
            computers[start][start] = 0
        return 1

    for i in range(n):
        for j in range(n):
            if computers[i][j] == 1 and i not in visited:
                stack.append(i)
                answer += search(computers)

    return answer
  1. stakk을 stack으로 수정한 이유는 변수명을 명확하고 의미있게 하기 위해서입니다. stack은 일반적으로 스택 자료구조를 의미하기 때문에 보다 이해하기 쉽고 일반적인 표현입니다.
  2. visited를 set()으로 초기화한 이유는 방문한 노드를 중복해서 방문하지 않도록 하기 위해서입니다. set()은 원소의 중복을 허용하지 않는 자료구조이므로 중복 방문을 방지할 수 있습니다.
  3. serch 함수 내부에서 visited를 set()으로 변경한 이유는 방문한 노드를 빠르게 확인하기 위해서입니다. set()은 원소의 포함 여부를 빠르게 확인할 수 있으므로 visited에서의 탐색 시간을 줄일 수 있습니다. 또한, start를 stack.pop()으로 수정하여 스택의 마지막 요소를 가져오도록 하여 노드를 방문하게 되었습니다.
  4. visited를 set()으로 변경하고, answer를 search 함수 호출 결과로 갱신한 이유는 방문한 노드의 개수를 적절히 카운팅하기 위해서입니다. visited는 중복 방문이 허용되지 않으므로 visited의 길이가 곧 방문한 노드의 개수가 됩니다. search 함수는 방문한 노드의 개수를 반환하므로 이를 answer에 누적하여 최종 결과를 계산할 수 있습니다.
반응형
반응형

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

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

그리디 알고리즘이란 매 순간의 최적의 해만 찾아가는 알고리즘이다

import sys
n = list(map(int, sys.stdin.readline().split()))
lst_coin =[]
for k in range(n[0]):
     j = int(sys.stdin.readline())
     if j < n[1]:
         lst_coin.append(j)
num_coi = 0
target = n[1]
while target>0:
    if target// max(lst_coin)>0:
        num_coi = num_coi + target//max(lst_coin)
        target = target -(target//max(lst_coin)) *max(lst_coin)
        lst_coin.remove(max(lst_coin))
    else:
        lst_coin.remove(max(lst_coin))
    print(num_coi)
    print(target)
    print(lst_coin)
print(num_coi)

답은 맞게 나오는데 틀렷다고 나온다

살려주세요

반응형
반응형

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

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

문제

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다. 

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

출력

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

예제 입력 1 

level

예제 출력 1 

1

예제 입력 2 

baekjoon

예제 출력 2 

0

문자를 입력받아 리스트로 만들고

리스트 0번과 -1번을 비교해서

두개가 같으면 pop으로 날리는 과정을 반복해서

입력받은 문자 길이가 홀수면 마지막에 길이가 1인 리스트가 남고

입력받은 문자 길이가 짝수면 마지막에 길이가 0인 리스트가 남는지 확인해서 결과를 출력하였다

import sys
str = list(sys.stdin.readline())[:-1]
for i in range(int(len(str)/2)):
    if str[0] == str[-1]:
      str.pop(0)
      str.pop(-1)
if len(str) ==len(str)%2:
  print(1)
else:
  print(0)

 

반응형
반응형

입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

예제 입력 1 

5
5
2
3
4
1

예제 출력 1 

1
2
3
4
5

기본적 sort다

import sys
n = int(sys.stdin.readline())
t = []
for k in range(n):
    j = int(sys.stdin.readline())
    t.append(j)
    if k>0:
        for a in range(1, k+1):
            if t[-a] < t[-a-1]:
                temp = t[-a]
                t[-a]= t[-a-1]
                t[-a-1] = temp
for c in range(n):
    print(t[c])

swap 코드는 암기후 써먹는다

append를 하면 뒤로 붙어서 비교 연산을 뒤에서부터 마이너스를 붙여서 해야한다

마이너스로 연산할때는 range가 달라진다

0 1 2 3 4 ---> -5 -4 -3 -2 -1

range(k) --> range(1, k+1)

반응형

+ Recent posts