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

 

 

문제

부등호 k개인 부등식이 주어지면, 그 사이에 0~9 사이의 숫자를 넣어서 부등식이 충족되는 숫자를 찾습니다.

숫자의 최소, 최대 숫자를 출력합니다.

 

풀이

  1. 부등호 리스트를 받습니다.
  2. 부등호 맨 앞에 숫자를 다 넣습니다.
  3. 숫자가 k + 1 만큼 채워지면 최소, 최대인지 확인합니다.
  4. 숫자가 k + 1 보다 작다면 현재 비교해야할 부등호와, 부등호 앞에 있는 숫자(A) 를 확인합니다.
    1. 숫자를 중복해서 사용하면 안되므로, 0 ~ 9까지 이전에 사용된 숫자라면 넘깁니다.
    2. 부등호가 '>' 라면, 'A > i' 가 만족되어야 하므로 A보다 작은 숫자만 함수에 넣어줍니다.
    3. 부등호가 '<' 라면, 'A < i' 가  만족되어야 하므로 A보다 큰 숫자만 함수에 넣어줍니다. 

 

코드

from sys import stdin

input = stdin.readline

N = int(input())
sign_list = list(input().split())

min_num = 9999999999
max_num = 0
result = ['', '']

def backTraking(nums):
    global min_num
    global max_num
    len_num = len(nums)
    if len_num == N + 1:
        str_nums = ''.join(map(str, nums))
        int_nums = int(str_nums)
        min_num = min(min_num, int_nums)
        max_num = max(max_num, int_nums)
        if min_num == int_nums: result[1] = str_nums
        if max_num == int_nums: result[0] = str_nums

        return
    
    index = len_num - 1
    sign = sign_list[index]
    num = nums[index]
    # 사용 가능한 숫자
    for i in range(10):
        if i in nums: continue
        if sign == '>':
            if i < num:
                backTraking(nums + [i])
        if sign == '<':
            if i > num:
                backTraking(nums + [i])


for i in range(10):
    backTraking([i])

for i in result:
    print(i)

본인 닉네임 레포지토리를 만들면 자동으로 REAME.md 파일이 등록됩니다.

 

 

사진에 적혀있는 것처럼 special 레포이고, REAME.md를 추가하고 public으로 초기 세팅해야 합니다!!

 

처음에 만들면 아래의 README.md가 채워져있습니다.

 

이제 여기에 글을 작성해서 깃허브 프로필을 꾸며봅시다! 😊

 

다른 블로그들을 참고해서 해보았는데, 괜찮아보이는 것은 아래 두 개였습니다. 다른 것들도 많으니 다른 블로그도 참고해보세요!

  1. 뱃지를 다는 것
  2. Github Stats를 넣는 것

최종적으로는 뱃지만 달긴 했지만 설명은 적어두겠습니다.

 

 


Shields.io 를 통해 뱃지 달기

 

 

사이트에 들어가서 Get started를 누르면 문서가 나옵니다.

 

Static Badge

<img alt="Static Badge" src="https://img.shields.io/badge/label-message-blue">

위의 뱃지를 나타내는 것입니다.  라벨과 메세지를 나누고 싶으면 dash ( `-` ) 로 나누면 됩니다.

 

<img alt="Static Badge" src="https://img.shields.io/badge/라벨-메세지-색상">

라벨, 메세지, 색상에 본인이 원하시는 것으로 넣으면 됩니다.

 


 

Static Badge

<img alt="Static Badge" src="https://img.shields.io/badge/just_message-blue">

위의 뱃지를 나타낸 것입니다. 띄어 쓰기는 underscore( _ ) 나 %20으로 적으시면 됩니다.

 

<img alt="Static Badge" src="https://img.shields.io/badge/메세지-색상">

 

메세지, 색상을 본인이 원하시는 것으로 넣으시면 됩니다.

 


 

로고, 로고 색상도 넣을 수 있습니다.

 

Simple Icons

 

Simple Icons

3209 Free SVG icons for popular brands

simpleicons.org

위 사이트에서 원하는 아이콘을 찾고, 제목을 클릭하면 해당 아이콘의 Brand slug가 복사됩니다.

 

 

저는 아이콘을 계속 눌렀는데 HTML이 나와서... 여기 SimpleIcon 의 slugs.md를 확인했는데요.

확인해보니 저 아래의 제목을 누르는 것이더라구요. 다들 저처럼 헷갈리지 않으셨으면 좋겠습니다. 🥲

 

 

Static Badge

<img alt="Static Badge" src="https://img.shields.io/badge/label-message-blue?logo=tistory&logo-color=FFFFFF">

 

쿼리파라미터로 뒤에 붙여주면 됩니다.

 

<img alt="Static Badge" src="https://img.shields.io/badge/label-message-blue?logo=복사한 Brand Slug&logo-color=로고 색상">

 

 


style도 차이가 있는데 상하좌우 패딩 차이입니다.

style 차이

출처: https://github.com/psincraian/pepy/issues/208

 

 


 

링크 달기

 

뱃지를 누르고 원하는 사이트에 이동시키고 싶다면 다음과 같이 하면 됩니다.

 

Static Badge

 

공부방

 

minstudy.tistory.com

<a href="넣을 링크" target="_blank">
  <img alt="Static Badge" src="https://img.shields.io/badge/메세지-색상?logo=로고&style=스타일">
</a>

 

메세지, 색상, 로고, 스타일, 넣을 링크에 원하는 값을 넣으면 됩니다.

 


Stat 추가하기

이렇게 생긴 것인데 

REAME.md에 아래의 줄을 입력하면됩니다.

![제목](https://github-readme-stats.vercel.app/api?username=깃헙 ID&show_icons=true&theme=테마)

제목, 깃헙 ID, 테마는 원하시는 것으로 수정하시면 됩니다.

지정가능한 테마 : https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md

 


 

저의 최종 READMD.md 파일입니다.

## 안녕하세요

<a href="https://minstudy.tistory.com" target="_blank">
  <img alt="Static Badge" src="https://img.shields.io/badge/tistory-blue?logo=tistory&style=for-the-badge">
</a>

 

 

 

이제 기술 스택들도 하나씩 늘려보려고 합니다.

꾸미는게 재밌네요!! ✨✨✨✨

 


추가로 기술 스택 뱃지를 달 때, 아래 뱃지들이 있는 곳에서 확인하면 더 빠를 것 같습니다!

 

https://github.com/digitalinnovationone/dio-lab-open-source/blob/main/utils/badges/badges.md

 

위의 링크로 마크다운으로 했더니 굉장히 빠르게 끝났습니다

 

## 안녕하세요

[![Tistory](https://img.shields.io/badge/Tistory-ed5207?style=for-the-badge&logo=tistory&logoColor=white)](https://minstudy.tistory.com)
[![Gmail](https://img.shields.io/badge/Gmail-333333?style=for-the-badge&logo=gmail&logoColor=red)](mailto:mins.choi214@gmail.com)

![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)
![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54)

![React](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)
![React Native](https://img.shields.io/badge/React_Native-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)
![Next](https://img.shields.io/badge/Next-black?style=for-the-badge&logo=next.js&logoColor=white)

![PostgreSQL](https://img.shields.io/badge/PostgreSQL-000?style=for-the-badge&logo=postgresql)

![AWS](https://img.shields.io/badge/AWS-000.svg?style=for-the-badge&logo=amazon-aws&logoColor=white)
![GoogleCloud](https://img.shields.io/badge/GoogleCloud-%234285F4.svg?style=for-the-badge&logo=google-cloud&logoColor=white)

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

 

문제

  • N개의 집이 있고, 좌표가 주어진다.
  • C개의 공유기를 설치하여 최대한 많은 곳에서 와이파이를 사용하려고 한다.
  • 공유기는 한 집에 하나만 설치할 수 있다.
  • 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치한다.

 

출력

가장 인접한 두 공유기 사이의 최대 거리를 출력한다.

 

풀이

  • 거리를 이분 탐색하면 된다.
  • 시작할 때 최소 거리는 바로 옆집이므로 1 이고, 최대 거리는 주어진 좌표의 끝과 끝이다.
  • 현재 집에서 중간 거리 ((최소 + 최대) // 2) 보다 큰 집에 공유기를 설치한다.
  • 중간 거리에 대해 공유기를 설치한 것이 보유한 공유기 (C) 보다 더 많은 경우, 거리를 더 줄여야 한다.
    반대로 공유기를 더 적게 사용한 경우 거리를 더 늘려도 된다.

 

코드

from sys import stdin

input = stdin.readline

N, C = map(int, input().split())

house = [int(input()) for _ in range(N)]
house.sort()

start, end = 1, (house[-1] - house[0])
result = 0

while start <= end:
    mid = (start + end) // 2
    cur = house[0]
    count = 1

    for i in range(1, N):
        if house[i] >= cur + mid:
            count += 1
            cur = house[i]

    if count >= C:
        start = mid + 1
        result = mid
    else:
        end = mid - 1

print(result)

'알고리즘 공부 > 이진 탐색' 카테고리의 다른 글

[백준/이진탐색] 2512번 예산  (0) 2024.06.21

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

문제

여러 지방 N개의 예산 요청을 받고, 국가 예산의 총액 이하로 예상을 배정합니다.

  1. 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정합니다.
    ex. [10, 10, 10, 20] 의 예산을 요청 받았고, 총 금액이 50이라면 국가 예산 총액에서 요청한 금액들을 모두 배정할 수 있습니다.
    즉, [10, 10, 10, 20] 예산 그대로 배정됩니다.
  2. 모든 요청이 배정될 수 없는 경우에는 특정한 정수 상한액을 계산하여 그 이상의 예산 요청에는 모두 상한액을 배정합니다. 상한액 이하의 예산 요청에 대해서는 요청한 금액을 그대로 배정합니다.
    ex. [110, 120, 140, 150]의 예산을 요청 받았고, 총 금액이 485인 경우에
    상한액을 127로 잡으면 [110, 120, 127, 127]의 예산이 배정됩니다.

출력

배정된 예산들 중 최댓값인 정수를 출력합니다.

 

풀이

from sys import stdin

input = stdin.readline

N = int(input())
# 요청한 예산
prices = list(map(int, input().split()))
# 국가 예산의 총액
total = int(input())

# 국가 예산의 총액으로 배정가능할 경우 최댓값을 출력합니다.
if sum(prices) <= total:
    print(max(prices))
else:
    start, end = 0, max(prices)

    while start <= end:
    	# 중앙값을 가져옵니다.
        mid = (start + end) // 2
        
        # 현재의 중앙값을 상한액으로 보았을 때, 총합을 계산합니다.
        result = 0
        for i in prices:
            if i > mid:
            	# 상한액 이상의 예산요청에는 모두 상한액을 배정한다.
                result += mid
            else:
            	# 상한액 이하의 예산요청에 대해서는 요청한 금액을 그대로 배정한다.
                result += i
                
        # 국가 예산 이하인 경우
        if result <= total:
            start = mid + 1
        # 국가 예산에 초과인 경우, 상한액을 내립니다.
        else:
            end = mid - 1
    print(end)

 

 

'알고리즘 공부 > 이진 탐색' 카테고리의 다른 글

[백준/이진탐색] 2110번 공유기 설치  (0) 2024.06.21

https://product.kyobobook.co.kr/detail/S000000600471

 

위대한 나의 발견 강점혁명 | 도널드 클리프턴 - 교보문고

위대한 나의 발견 강점혁명 | 자신의 강점을 아는 것만으로도 당신은 이미 성공의 길로 들어선 것이다!갤럽이 새롭게 만들어낸 강점 발견 프로그램, 스트렝스 파인더 2.0에 관해 정리한 내용을

product.kyobobook.co.kr

 

안녕하세요. 

"위대한 나의 발견 강점혁명" 이라는 책을 읽었습니다.

사실 책을 읽었다고 표현하기 보다는, 강점혁명 테스트를 하고 저에게 해당하는 테마를 살펴보았다는 표현이 옳겠군요.

 

해당 책을 사면, 책 내부에 액세스 코드가 있어서 다음 페이지에서 테스트를 통해 본인의 대표 강점 5가지를 확인할 수 있습니다.

추가로 돈을 내면 테스트 전체 결과를 볼 수 있습니다. 

https://www.gallup.com/home.aspx.

 

Gallup - Workplace Consulting & Global Research

Gallup is more than management consulting. Learn how our understanding of the human experience helps clients and the billions they serve thrive.

www.gallup.com

 

강점 혁명을 읽게된 이유는

회사 동료분께 추천받은 것도 있고, 최근에 회사에서 감정 소비가 컸던 부분이 일정한 패턴으로 나타난다는 사실을 깨닫게 되어서 저에 대해서 알고 싶어졌습니다. 제가 힘들었던 것은 예상하지 못한 일을 요청받았을 때, 반드시 그 일을 해야한다는 생각과 제가 이전에 세웠던 계획에 충돌이 일어나면서 갑작스러운 일과 계획한 일을 완수하지 못했을 때 자책하는 패턴이었습니다.

 

강점 진단에 대해서는 책에서 다음과 같이 설명하고 있습니다.

강점 진단은 지금까지 당신이 알아온 시험과는 다르다. 당신이 세상을 어떻게 느끼는지 측정하고, 당신이 어떤 사람인지 이해한다. 또한, 당신의 내부에 어떤 것들이 존재하는지, 그리고 당신을 이끄는 힘이 무엇인지를 수치화하여 밝혀줄 수 있는 유일한 시험이다.

강점 진단은 당신이 가진 자연적인 힘을 파악한다. 진단 결과도 색다르다. 무엇이 자신에게 가장 잘 맞는지를 보여주기 때문이다.

 

강점 진단을 한 후에는 저의 특성과 어떤 상황에서 스트레스를 받는지, 그 상황을 어떻게 피하거나 해결할 수 있는지 등을 이해하는데 도움이 되었습니다. 

 

아래의 부분은 저의 검사 결과이고, 이후 제가 다시 보기 위해 특성을 정리하고자 쓴 글입니다.

강점 5가지 결과를 받고나서는, 나머지 부분도 궁금해져서 추가 결제를 했습니다. 💸


강화하기 섹션에 있는 것들이 저의 강점이고, 그 중 1~5가 가장 강한 테마입니다.

아래의 내용은 책의 테마 내용을 정리한 것입니다.

 

1. 책임 테마

  • 당신이 하겠다고 한 것은 끝까지 책임진다. 어떤 이유로든 책임을 이행하지 못하면, 자동적으로 상대방에게 보상할 방법을 찾기 시작한다.
  • 가까운 미래에 당신에게 도움을 청하는 사람들이 있을 것이다. 누군가 도움을 청할 때에는 반드시 선별해서 책임을 맡아야 한다. 도와주고 싶은 마음에 이끌려 감당할 수 없을 만큼 너무 많은 일을 떠맡을 수도 있다.
  • 실행 아이디어에서 눈여겨 본 글
    • 거절하는 것도 책임지는 것임을 알아야 한다. 당신에게 책임감은 본능적인 것이어서 다른 사람의 제안이나 부탁을 거절하지 못한다. 바로 이러한 이유 때문에 더더욱 신중하게 책임질 일을 선택해야 한다. 더 많은 책임은 당신에게 가장 중요한 영역에 해당하는 경우에만 맡자.
    • 당신은 참여하는 모든 프로젝트에 대해 지극히 당연하게 주인의식을 갖는다. 그런 주인의식 때문에 다른 이들과 나눠야 할 책임을 혼자 짊어지지 말자. 다른 사람들도 주인의식을 가져야 한다. 그래야 그들도 조직의 성장과 발전에 기여할 수 있다.
    • 당신은 책임 테마를 관리하는 법을 배워야 한다. 자신이 특정 문제를 처리하는 데 적합한 인물인지 생각해보자. 다른 일을 더 책임지기 전에 이미 맡고 있는 책임과 목표를 살펴보자. 너무 많은 업무를 맡거나 상충되는 요구가 있다면 품질이 떨어질 수 있다.
    • 체계나 집중 테마가 특히 강한 사람과 파트너 관계를 맺자. 이들은 당신이 정해진 궤도를 지키면서 과도한 부담을 지지 않도록 도와줄 것이다.
    • 책임 테마의 소유자는 자신이 약속을 '지켰는지' 알고 싶어한다. 의무를 얼마나 효율적으로 충족했는지 측정할 수 있는 측정 기준과 목표를 세우자. 또한 수준 높은 결과에 관해 이견이 없고 약속한 대로 목표를 달성할 수 있도록 기대치를 명시적이고 구체적으로 정해두자.

 

2. 화합 테마

  • 사람들이 서로 동의하는 부분을 찾는다. 당신은 갈등과 충돌에서 얻을 것이 없다고 생각하기 때문에 그것을 최소한으로 줄이려고 한다. 주위 사람들의 견해가 서로 다르다는 것을 알게 될 때, 당신은 공통점을 찾으려고 노력한다. 그들이 갈등에서 벗어나 화합을 이룰 수 있도록 노력한다.
  • 당신은 사람들이 자신의 견해를 타인에게 강요하는 데 너무나 많은 시간을 낭비한다고 생각한다. 당신은 우리 모두가 한 배를 타고 있고, 이 배를 우리가 가려는 곳에 이르도록 해야 한다고 생각한다. 이 배는 나무랄 데가 없다. 그렇기에 단지 우리 능력을 과시하기 위해 배를 흔들어댈 필요는 없는 것이다.
  • 실행 아이디어에서 눈여겨 본 글
    • 매일 사람들을 만나야 하는 역할은 피하는 것이 좋다. 예를 들어 전화 접촉 또는 방문 방식의 영업직이나 경쟁이 심한 직장은 당신을 좌절시킬 것이다.
    • 대립하지 않고 갈등을 해결하는 법을 알아야 한다. 그러지 않으면 화합 테마는 갈등을 회피하기에 급급하여 해결은 못할 수도 있다. 그러다 수동적 공격성을 지닌 행동을 하게 될 수 있다.
    • 주도력이나 행동 테마가 특히 강한 사람과 파트너 관계를 맺자. 갈등을 해소하려는 모든 노력이 수포로 돌아갔을 때 갈등 상황을 정면 돌파하도록 도와줄 것이다.
    • 당면한 과제와 관련없는 논쟁이 있을 시에는 주저하지 말고 개입하여 실질적인 문제로 대화의 방향을 돌려야한다. 경청과 효율성 사이에서 균형을 유지하는 것이 화합의 열쇠이다. 

 

3. 배움 테마

  • 배우는 과정에서 재미를 느낀다. 당신은 배우는 내용이나 배움의 결과보다도 과정에 더 흥미를 느낀다. 무지에서 앎으로 꾸준하게 계획적으로 발전해가는 과정에서 활기를 얻는다
  • 역동적인 업무 환경 속에서 탁월한 능력을 발휘한다. 시시각각 변화하는 비즈니스 환경에서는 새로운 분야에 대한 다량의 지식을 단기간에 습득한 후 프로젝트를 단기에 완수하고 곧바로 다음 프로젝트로 넘어갈 수 있는 능력이 필요하기 때문이다.
  • 실행 아이디어에서 눈여겨 본 글
    • 최선의 학습 방법을 정리해보자. (현재 저의 경우에는 조용히 혼자 정리하는 시간이 필요하면 학습에 큰 도움이 됩니다.)
    • 학습 진도를 추적하자. 예를 들어 주제 하나에 대해 책 다섯권 읽기나 PPT 3개 만들기 등이다. 
    • 기술적 역량이 필요한 역량을 찾아보자. 당신은 전문 지식을 얻고 유지하는 과정을 즐길 것이다. 가능하다면 기술 또는 규정이 꾸준하게 변하는 분야의 직업을 갖는다. 계속 배움에 도전할 때 활기를 얻는다. 

 

4. 체계 테마

  • 당신의 세계는 예측 가능해야 한다. 질서 정연하고 계획되어 있어야 한다. 그래서 당신은 본능적으로 일상을 체계화시킨다. 일과를 정하고, 스케쥴과 마감 날짜같은 시간 계획에 주력한다. 장기적인 과제 수행을 위해 구체적인 단기 계획을 세우고, 부지런히 각 계획은 실행한다.
  • 혼란스러운 삶 속에서 상황을 통제하고 있다는 느낌을 원하기 때문이다. 
  • 실행 아이디어에서 눈여겨 본 글
    • 실수를 저지르면 의기소침해질 수 있다는 사실을 받아들이자. 치계 테마의 핵심이 정확성이긴 하지만 후회스러운 실수 때문에 낙담하지 않기 위해서는 의기소침한 순간을 돌파하는 방법을 찾아야 한다.
    • 모든 사람이 체계적일 수는 없다. 어쩌면 당신은 사람들의 두서 없는 방식 때문에 좌절감을 느꼈을 수도 있다. 그 너머의 것을 볼 수 있도록 그들의 방식이 아닌 결과에 초점을 맞추자.
    • 정밀성은 체계 테마의 장점이다. 당신은 자세히 살펴보는 것을 즐긴다.
    • 체계 테마는 효율성을 향상시킨다. 체계 테마의 소유자는 완벽주의자다. 비효율성 때문에 시간이나 비용이 낭비되는 상황을 파악하고 효율성을 향상시킬 수 있는 체계나 절차를 마련하자.
    • 타임라인은 당신에게 동기부여가 된다. 단계별 계획을 짜서 적용해보자. 
    • 체계화된 역할과 책임을 찾아보자.

 

5. 공감 테마

  • 주위 사람들의 강점을 매우 잘 느낀다. 상대방의 감정을 본능적으로 이해할 수 있는 능력에는 강력한 힘이 있다.
  • 상대방이 말하지 않아도, 무엇을 궁금해하고, 어떤 것이 필요한지 예측할 수 있다. 사람들이 감정을 어떻게 표현해야 할지 몰라 고민할 때도 당신은 적절한 단어는 물론 적절한 어조까지 찾아내곤 한다.
  • 실행 아이디어에서 눈여겨 본 글
    • 주도력 또는 행동 테마가 강한 사람과 파트너 관계를 맺자. 그들이 다른 사람을 불편하게 만들더라도 당신이 그들에게 필요한 조치를 취할 수 있게 도와줄 수 있을 것이다.
    • 간혹 남을 위한 공감력이 당신을 압도할 수 있다. 하루의 일과가 끝날 때 업무가 완료되었음을 알려주는 의례적인 절차를 만들어보자. 당신의 감정을 보호하고 정서적으로 녹초가 되는 것을 막을 수 있다.
    • 공감 테마가 강한 친구를 찾아 당신이 관찰한 내용이 맞는지 확인해보자.
    • 어떤 일이든지 세상에 널리 알려지기 전에 상황이 어떻게 벌어질지 직감적으로 안다. 당신의 직감은 간혹 '예감'처럼 보일 수 있지만 이런 직감에 의식적으로 주목하자. 이 직감은 귀중한 자산이 될 수 있다.

 

 

정리를 해보니 위에서 말했던 감정 소비가 큰 부분의 이유를 찾을 수 있었습니다. 

앞으로는 제가 할 수 있는 범위에서만 요청을 받고, 요청을 받더라도 처음에 목표와 시간이 정확하게 받으면 해결되겠다는 생각이 드네요.

 

본인의 특성을 알고 싶은 분들께 추천드립니다.

 

 

 

'책 리뷰' 카테고리의 다른 글

[에세이] 메이크 타임 리뷰  (0) 2022.03.13

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

 

1550번: 16진수

첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다.

www.acmicpc.net

 

 

 

 

16진수를 받아서, 10진수로 변환합니다.

print(int(input(), 16))

 

Pagination (페이지네이션)

  • 문서를 개별 페이지로 나누는 프로세스입니다.

https://www.w3schools.com/css/css3_pagination.asp

 

CSS Pagination Examples

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

 

Infinite-Scroll (무한 스크롤)

  • 사용자가 페이지 하단에 도달하면 콘텐츠가 계속 로드되는 UX 방식입니다.
  • 단일 페이지에서 끝없는 정보 흐름을 경험할 수 있습니다.

 

Pagination vs. Infinite-Scroll

Pagination (페이지 네이션)

  • 장점
    • 사용자 의도에 맞게 페이지를 넘길 수 있습니다. 특정 콘텐츠를 찾을 때 이 방식이 유용합니다.
    • 특정 항목의 위치를 파악할 수 있습니다.
  • 단점
    • 다음 페이지로 이동하기 위해 새 페이지가 로드될 때까지 기다려야 합니다.
    • 한 페이지에 제한된 내용만 보여줄 수 있습니다.

 

Infinite-Scroll (무한 스크롤)

  • 장점
    • 사용자 참여 및 콘텐츠 탐색이 쉽습니다.
      • 사용자가 더 오래 웹페이지에 남을 수 있어서, 참여도를 높일 수 있습니다.
      • 정보를 로딩되기를 기다리지 않고 정보를 탐색할 수 있습니다.
    • 더 나은 사용자 경험을 제공합니다.
    • 모바일에 적합합니다.
  • 단점
    • 페이지 성능이 느려집니다.
      • 무한 스크롤을 사용하면 스크롤할 수록 많은 콘텐츠가 업로드가 되어야하므로, 페이지 성능이 떨어집니다.
    • 특정 항목 검색 및 원래 위치로 되돌아오기 힘듭니다.
    • 스크롤 막대가 실제 데이터의 양을 반영하지 못합니다.
    • Footer를 찾기 어려워집니다.

 

 

 

 

 

참조

https://uxplanet.org/ux-infinite-scrolling-vs-pagination-1030d29376f1

 

UX: Infinite Scrolling vs. Pagination

by Nick Babich

uxplanet.org

https://slowalk.com/2596

 

무한 스크롤 vs 페이지네이션

혹시 프리랜서로 일하세요? 혼자 다 하는 업무에 지쳤다면, 스트레스 줄이는 프리랜서 풀 샐러드볼로 오세요! [주간챙스] 콘텐츠 보는 인터페이스, 상황 따라 사용하기 안녕하세요. 슬로워크 마

slowalk.com

 

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

 

2239번: 스도쿠

스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다

www.acmicpc.net

 

문제: 스도쿠 판에 이미 숫자가 쓰여있고, 안에 들어갈 숫자를 찾는 문제입니다.

풀이: 비어있는 좌표를 저장하고, 해당 좌표를 기점으로 행, 열, 네모 안에 사용된 숫자를 제외한 숫자를 사용하여 하나씩 넣어보면서 스도쿠가 완성될 수 있는 숫자값을 찾습니다.

 

import sys
input = sys.stdin.readline

sudoku=[list(map(int,list(input().rstrip()))) for _ in range(9)]
blank = [(i,j) for i in range(9) for j in range(9) if sudoku[i][j]==0]

def find(n):
    if n == len(blank):
        for i in sudoku:
            print(''.join(map(str,i)))
        return True

    i,j = blank[n]

    total_number = set([num for num in range(1,10)])
    # 행, 열, 네모에 사용된 것
    used = set(sudoku[i] + [sudoku[r][j] for r in range(9)] + [sudoku[r][c] for r in range(3*(i//3),3*(i//3)+3) for c in range(3*(j//3), 3*(j//3) +3)])
    for num in sorted(total_number - used):
        sudoku[i][j] = num
        if find(n+1):
            return True
        sudoku[i][j] = 0
    return False


find(0)

 

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

 

1976번: 여행 가자

동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인

www.acmicpc.net

 

문제: 도시의 수와, 여행에 갈 도시의 수, 도시 간의 연결을 인접행렬로 받습니다. 이 정보들을 통해 계획한 도시들을 여행할 수 있는지 확인하는 문제입니다.

 

풀이: Union-find를 사용하여, 연결된 도시를 한 집합으로 묶습니다. 마지막에 여행할 도시들을 번호로 받는데 해당 번호들의 부모를 확인하고, 부모가 하나가 아니면 이 여행은 갈 수 없습니다.

 

 

import sys
input = sys.stdin.readline

N,M = int(input()), int(input())
parent = [i for i in range(N+2)]


#Root node 찾기
def find(x):
    if x== parent[x]:
        return x
    else:
        root_x = find(parent[x])
        parent[x] = root_x
        return parent[x]
 
def union(x,y):
    root_x = find(x)
    root_y = find(y)
 
    if root_x != root_y:
        parent[root_y] = root_x
    else:
        return

# 연결된 도시들을 한 집합으로 봅니다.
for i in range(1,N+1):
    link = list(map(int,input().split()))
    for j in range(1,len(link)+1):
        if link[j-1] == 1:
            union(i,j)

#여행계획을 확인합니다.
path = list(map(int,input().split()))
result = set([find(i) for i in path])
if len(result)!=1:
    print('NO')
else:
    print('YES')

SSR (Server Side Rendering)

  • 서버쪽에서 보여줄 페이지를 모두 구성하여 사용자에게 페이지를 보여주는 방식입니다.
  • SSR을 사용하면, 모든 데이터가 매핑된 서비스 페이지를 클라이언트(브라우저)에게 바로 보여줄 수 있습니다.
  • 서버를 이용해서 페이지를 구성하기 때문에 CSR보다 페이지를 구성하는 속도는 늦어지지만 전체적으로 사용자에게 보여주는 콘텐츠 구성 완료되는 시점이 빨라진다는 장점이 있습니다.
  • 또한, SEO(Search Engine  Optimization)을 쉽게 구성할 수 있습니다.
  • 하지만, CSR 보다 서버 자원을 더 많이 사용합니다.

 

 

 

SSR

 

 

 

CSR (Client Side Rendering)

  • 초기 전송되는 페이지 속도는 빠르지만 서비스에서 필요한 데이터를 클라이언트에서 추가로 요청하여 재구성해야하기 때문에, 전체적인 페이지 완료 시점은 SSR보다 늦습니다.

CSR

 

 

 

 

 

 

 

 

[참조]

https://d2.naver.com/helloworld/7804182

https://medium.com/walmartglobaltech/the-benefits-of-server-side-rendering-over-client-side-rendering-5d07ff2cefe8

 

The Benefits of Server Side Rendering Over Client Side Rendering

Most of our pages on walmart.com are using server side rendering (henceforth SSR) with only a few unique exceptions.

medium.com

 

이 글에서는 Deep Link, Dynamic Link, Universal Link가 무엇인지 정리하고자 합니다.

 

Deep Link란?

  • 딥링크는 사용자를 웹 사이트나 스토어가 아닌 앱으로 직접 연결하는 링크 유형입니다. 딥 링크는 앱이 이미 설치된 경우 앱을 여는 사용자 지정 URL 체계(iOS Universal Link) 나 intent URL(on Android)을 지정하여 수행합니다. 사용자를 특정 이벤트나 페이지로 안내하도록 딥 링크를 설정할 수 있습니다.
  • 안드로이드에서는 'Deep Link', iOS에서는 'Universal Link'의 방식으로 기능을 제공합니다.

 

만약 사용자가 설치하지 않은 앱에 딥 링크를 연결하면, 이 때  Deferred Deep Link(지연된 딥 링크)가 작동합니다.

 

Deferred Deep Link (지연된 딥 링크)

  • 사용자가 딥 링크를 클릭했을 때 앱이 설치되지 않은 경우 App store로 갈 수 있습니다.
  • 장점은 사용자가 앱을 설치하고 열 때, 처음에 사용자가 방문하기를 원했던 앱의 위치로 전송될 수 있습니다.

 

Dynamic Link (다이나믹 링크)

  • 다이나믹 링크는 구글 파이어 베이스에서 제공하는 서비스입니다. 이것 또한 딥 링크입니다.
  • 기존 딥링크는 안드로이드, iOS에 따라 각각 구현해야 했습니다. 하지만 파이어 베이스 다이나믹 링크는 앱이 이미 설치되어 있는지 여부와 상관 없이 여러 플랫폼에서 원하는 방식으로 작동하는 링크입니다.

 

Universal Link

  • 기존 딥 링크와 차이는 없지만, Universal Link는 iOS를 실행하는 Apple 장치 전용이며, 응용 프로그램에서 웹 페이지를 열 수 있습니다.
  • 작동 방식 : 표준 딥 링크와 유사하지만, 사용자 지정 URL 체계를 정의하는 대신에 웹 페이지 집합을 앱 내 위치와 일치시킵니다. 즉, 사용자가 일치하는 웹 페이지를 열면 iOS가 자동으로 사용자를 앱으로 리디랙션합니다.
  • iOS 버전 9이상에서 사용할 수 있으며, 앱이 사용자 기기에 설치되어 있지 않아도 작동하고, 설치되어 있지 않으면 사파리를 통해 웹 사이트에 연결됩니다. → 웹 사이트와 앱 모두 하나의 URL에서 작동합니다.

 

Deep Link가 이미 있는데, Universal Link가 존재하는 이유?

  • Apple에서 보안, 개인 정보 보호 및 유연성, 안정적인 시스템을 만들기 위해 만들었습니다.

 

Universal Link가 생성한 문제?

  • Right corner evil
    • 아이폰, 아이패드의 오른쪽 상단에 있는 '탐색 경로'를 의미하며, 사용자가 앱에서 웹으로 이동했다가 다시 돌아가기 원할 때 클릭합니다.
    • 사용자가 Universal Link를 클릭하면, iOS는 사용자의 최근 선택 사항을 확인해서 앱, 웹 중 무엇을 열지 결정합니다. 사용자가 앱에 대한 Universal Link를 클릭한 다음 이동 경로 버튼을 클릭하여 사파리에서 사이트를 열었다면, iOS는 해당 선택을 기억하고 사용자가 앱으로 가길 원해도 사파리에서 사이트를 계속 엽니다.
    • 이는 사용자가 웹에 갇혔음을 의미합니다. 사용자가 웹 페이지의 스마트 앱 배너를 탭하는 것을 모른다면 앱을 다시 열지 못하고, 앱 개발측에서는 조치를 취할 방법이 없습니다.
    • 사용자가 링크를 길게 눌러 '앱에서 열기'를 선택해야 합니다.

 

 

 

 

https://www.adjust.com/glossary/deep-linking#what-is-deep-linking

 

What is deep linking? | Adjust

Do you know what deep linking is? Learn what you can do with deep linking, why deep links are important, and how Adjust can help you with deep linking.

www.adjust.com

https://www.adjust.com/blog/universal-links-vs-deep-links/

 

Universal links vs deep links | Adjust

Do you know the difference between universal links and deep linking? Learn about ios universal links and get a better understanding of how to use them.

www.adjust.com

https://firebase.google.com/docs/dynamic-links/

 

Firebase Dynamic Links  |  Firebase 문서

Firebase 동적 링크는 앱이 이미 설치되어 있는지 여부와 상관없이 여러 플랫폼에서 원하는 방식으로 작동하는 링크입니다.

firebase.google.com

 

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

 

17256번: 달달함이 넘쳐흘러

첫째 줄에 케이크 수 a를 구성하는 자연수 a.x, a.y, a.z 가 차례대로 주어진다. (1 ≤ a.x, a.y, a.z ≤ 100) 둘째 줄에 케이크 수 c를 구성하는 자연수 c.x, c.y, c.z 가 차례대로 주어진다. (1 ≤ c.x, c.y, c.z

www.acmicpc.net

 

문제 : a 🍰 b = (a.z + b.x, a.y × b.y, a.x + b.z) = c인 연산에서 a, c가 주어졌을 때, b를 구하는 문제입니다.

풀이: 덧셈을 뺄셈으로, 곱셈은 나눗셈을 하면 됩니다.

 

A = list(map(int,input().split()))
C = list(map(int,input().split()))
print(C[0]-A[2], int(C[1]/A[1]), C[2]-A[0])

+ Recent posts