[Linux] 리눅스에서 압축 및 해제 하는법

[Linux] 리눅스에서 압축 및 해제 하는법

1. tar 압축

1
2
3
4
> tar -cvf [파일명.tar] [폴더명]

ex) abc라는 폴더를 aaa.tar로 압축하고자 한다면
> tar -cvf aaa.tar abc

2. tar 압축풀기

1
2
3
4
> tar -xvf [파일명.tar]

ex) aaa.tar라는 tar파일 압축을 풀고자 한다면
> tar -xvf aaa.tar

3. tar.gz 압축

1
2
3
4
> tar -zcvf [파일명.tar.gz] [폴더명]

ex) abc라는 폴더를 aaa.tar.gz로 압축하고자 한다면
> tar -zcvf aaa.tar.gz abc

4. tar.gz 압축풀기

1
2
3
4
> tar -zxvf [파일명.tar.gz]

ex) aaa.tar.gz라는 tar.gz파일 압축을 풀고자 한다면
> tar -zxvf aaa.tar.gz

5. zip 압축

1
2
3
4
> zip [파일명.zip] [폴더명]

ex) abc라는 폴더를 aaa.zip으로 압축하고자 한다면
> zip aaa.zip abc

6. zip 압축풀기

1
2
3
4
5
6
7
> unzip [파일명.zip]

ex) aaa.zip라는 zip파일 압축을 풀고자 한다면
> unzip aaa.zip

ex) 특정 폴더에 압축풀기
> unzip aaa.zip -d ./target

자주 쓰는 tar 옵션 명령어

옵션 설명
-c 파일을 tar로 묶음
-p 파일 권한을 저장
-v 묶거나 파일을 풀 때 과정을 화면으로 출력
-f 파일 이름을 지정
-C 경로를 지정
-x tar 압축을 풂
-z gzip으로 압축하거나 해제함
[Git] 특정 Branch만 Clone하기

[Git] 특정 Branch만 Clone하기

Git을 사용하면서 브랜치 전체 Clone하지 않고, 특정 브랜치 하나만 사용해야할 경우가 있다.

하지만, 기본적으로 알고 있는 방법으로 git clone할 경우 Master가 바로 Clone됨으로, 특정 브랜치만 클론하는 방법을 알아보자


1
2
3
4
git clone -b <branch명> --single-branch <저장소URL>


ex) git clone -b rpi-4.12.y --single-branch https://github.com/raspberrypi/linux

[백준] 13417번 카드 문자열

[백준] 13417번 카드 문자열

출처: [백준] 13417번 카드 문자열


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 256 MB 1290 798 696 65.108%

문제

N장의 카드가 일렬로 놓여있다. 각 카드에는 알파벳이 하나씩 적혀있다. 태욱이는 가장 왼쪽에 있는 카드부터 차례대로 한 장씩 가져올 수 있다. 가장 처음에 가져온 카드는 자신의 앞에 놓는다. 그다음부터는 가져온 카드를 자신의 앞에 놓인 카드들의 가장 왼쪽, 또는 가장 오른쪽에 놓는다. 태욱이는 모든 카드를 다 가져온 후에 자신의 앞에 놓인 카드를 순서대로 이어 붙여 카드 문자열을 만들려고 한다.

예를 들어 3장의 카드가 [M, K, U] 순으로 놓여있다고 하자. 태욱이는 먼저 가장 왼쪽에 있는 “M”이 적힌 카드를 가져와서 자신의 앞에 놓는다. 다음으로 남은 카드 중 가장 왼쪽에 있는 “K”가 적힌 카드를 가져와서 가장 왼쪽에 두고, 이어서 “U”가 적힌 카드를 가져와서 다시 가장 왼쪽에 두면 “UKM”이라는 문자열을 만들 수 있다. 만약 “K”가 적힌 카드를 가져와서 가장 왼쪽에 두고, 이어서 “U”가 적힌 카드를 가져와서 가장 오른쪽에 두면 “KMU”라는 문자열을 만들 수 있다. 이때, 태욱이가 만들 수 있는 문자열 중 사전 순으로 가장 빠른 문자열은 “KMU”이다.

N장의 카드에 적혀있는 알파벳의 처음 순서가 주어질 때, 태욱이가 만들 수 있는 카드 문자열 중 사전 순으로 가장 빠른 문자열을 출력하는 프로그램을 작성하시오.


입력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각각의 테스트 케이스의 첫째 줄에 처음에 놓여있는 카드의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 두 번째 줄에는 N장의 카드에 적힌 알파벳의 초기 순서가 주어진다. 가장 왼쪽에 있는 카드에 적혀있는 알파벳부터 순서대로 N개가 공백으로 구분되어 주어진다. 모든 카드에는 한 개씩의 알파벳이 적혀있으며, 모두 대문자이다.


출력

출력은 표준 출력을 사용한다. 입력받은 데이터에 대해, 한 줄에 1개씩 태욱이가 만들 수 있는 문자열 중에서 사전 순으로 가장 빠른 문자열을 출력한다.


예제 입력 1

1
2
3
4
5
6
7
3
3
M K U
5
A S D F G
7
B A C A B A C

예제 출력 1

1
2
3
KMU
ASDFG
AAABCBC

출처


알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
from collections import deque

input = sys.stdin.readline

T = int(input())
for _ in range(T):
N = int(input())
card_list = deque(input().rstrip().split())
new_list = deque(card_list.popleft())

while card_list:
temp = card_list.popleft()
if temp > new_list[0]:
new_list.append(temp)
else:
new_list.appendleft(temp)

print(''.join(new_list))

[백준] 18115번 카드 놓기

[백준] 18115번 카드 놓기

출처: [백준] 18115번 카드 놓기


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 (추가 시간 없음) 1024 MB 723 403 314 57.615%

문제

수현이는 카드 기술을 연습하고 있다. 수현이의 손에 들린 카드를 하나씩 내려놓아 바닥에 쌓으려고 한다. 수현이가 쓸 수 있는 기술은 다음 3가지다.

  1. 제일 위의 카드 1장을 바닥에 내려놓는다.
  2. 위에서 두 번째 카드를 바닥에 내려놓는다. 카드가 2장 이상일 때만 쓸 수 있다.
  3. 제일 밑에 있는 카드를 바닥에 내려놓는다. 카드가 2장 이상일 때만 쓸 수 있다.

수현이는 처음에 카드 N장을 들고 있다. 카드에는 1부터 N까지의 정수가 중복되지 않게 적혀 있다. 기술을 N번 사용하여 카드를 다 내려놓았을 때, 놓여 있는 카드들을 확인했더니 위에서부터 순서대로 1, 2, …, N이 적혀 있었다!

놀란 수현이는 처음에 카드가 어떻게 배치되어 있었는지 궁금해졌다. 처음 카드의 상태를 출력하여라.


입력

첫 번째 줄에는 N (1 ≤ N ≤ 106)이 주어진다.

두 번째 줄에는 길이가 N인 수열 A가 주어진다. Aix이면, i번째로 카드를 내려놓을 때 x번 기술을 썼다는 뜻이다. Ai는 1, 2, 3 중 하나이며, An은 항상 1이다.


출력

초기 카드의 상태를 위에서부터 순서대로 출력하여라.


예제 입력 1

1
2
5
1 1 1 1 1

예제 출력 1

1
5 4 3 2 1

예제 입력 2

1
2
5
2 3 3 2 1

예제 출력 2

1
1 5 2 3 4

출처


알고리즘 분류


풀이

1
2
3
4
반대로
1) 맨위의 카드를 바닥으로
2) 맨위의 카드를 바닥에서 2번째로
3) 맨위의 카드를 맨위로

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
from collections import deque

input = sys.stdin.readline

N = int(input())
card_list = deque(range(1, N + 1))
commands = list(map(int, input().split()))
init_list = deque()

while commands:
command = commands.pop()
temp = card_list.popleft()
if command == 1:
init_list.appendleft(temp)
elif command == 2:
init_list.insert(1, temp)
elif command == 3:
init_list.append(temp)

print(*init_list)

2021년 07월 26일 월요일 IT뉴스

1. 바람소리까지 차단 vs10만원대로 ‘가성비’ 충족‘…노이즈 캔슬링’ 경쟁 속으로

바람소리까지 차단 vs10만원대로 ‘가성비’ 충족‘…노이즈 캔슬링’ 경쟁 속으로

올해 새로 출시되는 무선이어폰들도 노이즈캔슬링 기능이 큰 관심사다. 소니는 지난달 ‘헤드폰급’ 노이즈캔슬링 성능을 자부한 신제품 ‘WF-1000XM4’를 내놨으며, 는 바람 소리를 억제하는 기능을 추가해 야외에서도 노이즈캔슬링 효과가 커졌다고 강조했다.

삼성전자는 내달 11일 온라인 언팩(신제품 공개) 행사에서 무선이어폰 ‘갤럭시 버즈2’를 공개할 예정인데, 노이즈캔슬링 기능을 넣고도 가격을 10만원대 후반으로 책정해 가성비를 높일 것이란 관측이 나오고 있다.

애플은 오는 9월 선보일 것으로 예상되는 무선이어폰 ‘에어팟3’에서 외려 노이즈캔슬링을 빼고, 10만원대 후반으로 가격을 낮출 것이란 외신 보도가 나오고 있다.


2. 새벽 1시, 자는데 SNS ‘로그인’ 문자가…

새벽 1시, 자는데 SNS ‘로그인’ 문자가…

2단계 인증의 중요성에 대해, 화이트 해커(정보 보안 전문가)이자 유튜버인 **노말틱(Normaltic)**은 이렇게 설명했다. 그는 **”해커 입장에서 2단계 인증을 만나게 되면 진짜 심각하게 짜증난다”**며 **”비밀번호는 바꾸기 전까진 고정된 정보이지만, 2단계 인증 정보는 로그인 할 때마다 바뀌는 값이기 때문”**이라고 했다.

그러면서 노말틱은 **”그 2단계 인증 시스템을 해킹하지 않는 이상 계정을 해킹하기 어렵다”**며 **”그만큼 강력한 것”**이라고 했다. 특히 이메일 계정만큼은 1순위로 2단계 인증을 해야 한다고 했다. 초기화 된 비밀번호가 다 이메일 계정으로 가기 때문에, 거의 모든 계정을 해킹할 수 있어서다.


3. 토스·쿠팡·배민 등 플랫폼업체 개인정보·상담내용 유출

토스·쿠팡·배민 등 플랫폼업체 개인정보·상담내용 유출

25일 채팅 상담 해피톡 운영사 엠비아이솔루션에 따르면 21일 오후 2시 해커가 자사 서버에 침입해 개인정보를 비롯한 채팅 상담 데이터를 유출시켰다고 밝혔으며, 토스(비바리퍼블리카), 쿠팡, 배달의민족 등 대형 플랫폼의 고객 이름, 전화번호 등 개인정보와 함께 상담내용까지 총 8만여건이 유출된 것으로 파악됐으며, 정보유출 피해를 입은 고객사는 700여개에 달한다.

해피톡은 해당 고객사에게 피해사실을 공지하고, 보상 및 향후 대응에 대해 협의를 진행 중이고, 토스의 경우 고객 1500여명의 개인정보가 유출되어 피해자 한 명당 10만원의 보상금을 선제적으로 지급하는 등 조기 진압에 나섰다. 배달의민족도 음식점 점주와 커넥터(라이더)가 회사 측과 주고받은 상담 내역 1만312건이 유출됐다.


4. 택시·대리·퀵 이어 렌터카…’카카오T’ 플랫폼 마지막 퍼즐 끼웠다

택시·대리·퀵 이어 렌터카…’카카오T’ 플랫폼 마지막 퍼즐 끼웠다

26일 IT업계에 따르면 공정위는 모빌리티 플랫폼 카카오T 운영사인 카카오모빌리티가 현대캐피탈의 온라인 차량대여 플랫폼 사업 딜카를 양수하는 기업결합 건을 경쟁제한 우려가 적다고 판단해 지난 8일 승인했다.

카카오모빌리티의 렌터카 업계 경쟁사로는 쏘카나 그린카 등 카셰어링 기업들이 거론되고 있지만, 실제 사업모델은 큰 차이가 있을 가능성이 크며, 카셰어링 기업의 경우 회사가 보유한 차량을 빌려주는 방식이지만, 카카오는 대리운전이나 택시, 퀵서비스처럼 ‘연결’에 중점을 둔 서비스를 제공할 것으로 예상된다. 실제 카카오모빌리티는 피유엠피, 지바이크 등과 업무협약을 맺고 퍼스널 모빌리티 서비스 연동을 추진 중이다.


5. 음성기반 일대일 커리어 대화 연결 플랫폼 ‘커피챗’, 중기부 팁스 프로그램 선정

음성기반 일대일 커리어 대화 연결 플랫폼 ‘커피챗’, 중기부 팁스 프로그램 선정

음성 기반 커리어 대화 연결 플랫폼 커피챗은 중소벤처기업부의 기술창업투자 프로그램인 팁스(TIPS)에 선정됐고, 올해 5월 본엔젤스벤처파트너스에서 시드 투자를 받은 후 이번 7월 팁스 프로그램에 추천을 받고 최종 선정됐다.

커피챗은 내가 궁금한 곳에 있는 사람과 일대일 익명 기반 자유로운 음성 대화를 제공하는 커리어 대화 연결 플랫폼으로 개개인의 커리어에 적합한 파트너와 음성 대화가 가능하도록 회사/직무/업계/학교별 파트너 검색 기능과 실시간 파트너 업데이트를 제공하고 있으며, 커피챗 실시간 리뷰, 맞춤 파트너 추천받기 등으로 서비스를 처음 이용하는 고객의 편의를 위한 서비스를 선보이고 있다.

박상우 커피챗 대표는 “고객마다 각기 다른 커리어 생애 주기에 맞게 최적화된 정보를 얻을 수 있도록 정교한 AI 알고리즘 구축과 지속적 모델링 고도화를 추진할 예정”이라고 밝혔다. 또한, “다양한 국가의 고객들이 커피챗을 통해 커리어와 관련된 모든 고민을 해결할 수 있는 올인원 커리어 플랫폼으로 나아가는 것이 목표” 라고 전했다.

[프로그래머스] 문자열 내 마음대로 정렬하기

[프로그래머스] 문자열 내 마음대로 정렬하기

출처: [코딩테스트 연습] 문자열 내 마음대로 정렬하기


문제

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [“sun”, “bed”, “car”]이고 n이 1이면 각 단어의 인덱스 1의 문자 “u”, “e”, “a”로 strings를 정렬합니다.


제한

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

입출력

strings n return
[“sun”, “bed”, “car”] 1 [“car”, “bed”, “sun”]
[“abce”, “abcd”, “cdx”] 2 [“abcd”, “abce”, “cdx”]

입출력 예 1

“sun”, “bed”, “car”의 1번째 인덱스 값은 각각 “u”, “e”, “a” 입니다. 이를 기준으로 strings를 정렬하면 [“car”, “bed”, “sun”] 입니다.

입출력 예 2

“abce”와 “abcd”, “cdx”의 2번째 인덱스 값은 “c”, “c”, “x”입니다. 따라서 정렬 후에는 “cdx”가 가장 뒤에 위치합니다. “abce”와 “abcd”는 사전순으로 정렬하면 “abcd”가 우선하므로, 답은 [“abcd”, “abce”, “cdx”] 입니다.


풀이

-


소스코드

1
2
3
4
5
6
7
8
9
def solution(strings, n):
strings.sort()
answer = sorted(strings, key=lambda x: x[n])
return answer


print(solution(["sun", "bed", "car"], 1))
print(solution(["abce", "abcd", "cdx"], 2))

[백준] 15501번 부당한 퍼즐

[백준] 15501번 부당한 퍼즐

출처: [백준] 15501번 부당한 퍼즐


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 256 MB 1224 493 313 43.961%

문제

현욱은 퍼즐 게임을 굉장히 좋아한다. 어느 날 현욱은 친구로부터 간단한 플래시 퍼즐 게임을 하나 추천 받았는데, 이 퍼즐 게임은 다음과 같은 규칙을 갖고 있다.

  1. 플레이어는 1 ~ n 까지 숫자가 한 번씩만 나타나는 수열을 하나 가지고 시작한다.
  2. 또 다른 1 ~ n 까지 숫자가 한 번씩만 나타나는 수열이 주어졌을 때, 처음 수열을 적절히 변형해서 처음 받은 수열을 이 수열과 동일한 수열로 만들어야 한다.
  3. 이때, 플레이어가 수열에 대해서 할 수 있는 동작은 다음 두 가지가 있다. 동작은 몇 번이라도 수행할 수 있다.
    • 뒤집기 : 현재 수열을 거꾸로 뒤집는다. ex) 1 2 3 4 5 -> 5 4 3 2 1
    • 밀기 : 현재 수열을 왼쪽 혹은 오른쪽으로 한 칸 민다. ex) 1 2 3 4 5 -> 5 1 2 3 4

퍼즐을 풀던 현욱은 분명히 엄청 쉬운 규칙인데도 불구하고 문제가 안 풀려서, 한참을 고민하다가 다시 잘 비교해보니 정답 수열을 주어진 동작만으로는 절대 만들 수가 없는 문제였다!

화가 난 현욱은 퍼즐 제작자에게 따지기 위해 주어진 문제가 올바른 문제인지 아닌지 확인하는 프로그램을 만들기로 결심했다. 현욱을 도와 괘씸한 퍼즐 제작자를 응징해주자.


입력

첫째 줄에 n이 주어진다(1 ≤ n ≤ 1,000,000).

둘째 줄에 1에서 n까지의 수가 한 번만 나타나는 수열이 순서대로 주어진다.

셋째 줄에 주어진 두 연산을 수행해서 구성할 수 있는지 확인할 1에서 n까지 수가 한 번만 나타나는 수열이 순서대로 주어진다.


출력

주어진 두 가지 연산만을 가지고 처음 수열을 결과 수열로 만들 수 있다면 good puzzle, 아니면 bad puzzle을 출력한다.


예제 입력 1

1
2
3
5
1 2 3 4 5
4 3 2 1 5

예제 출력 1

1
good puzzle

예제 입력 2

1
2
3
5
1 2 3 4 5
1 2 4 3 5

예제 출력 2

1
bad puzzle

출처


알고리즘 분류


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys

input = sys.stdin.readline

N = int(input())
sequence = list(map(int, input().split()))
compare = list(map(int, input().split()))

# 순방향
first_idx = compare.index(sequence[0]) # 기준점
new_list1 = compare[first_idx:] + compare[:first_idx]

# 역방향
compare = compare[::-1]
first_idx = compare.index(sequence[0]) # 기준점
new_list2 = compare[first_idx:] + compare[:first_idx]

# 둘 중 하나 맞으면 good puzzle
if sequence == new_list1 or sequence == new_list2:
print("good puzzle")
else:
print("bad puzzle")

소스코드

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
44
45
46
47
48
49
import sys

input = sys.stdin.readline

N = int(input())
sequence = list(map(int, input().split()))
compare = list(map(int, input().split()))

new_list1 = []
new_list2 = []

first_idx = compare.index(sequence[0]) # 기준점

# 순방향인 경우
start = first_idx - N
end = first_idx

for i in range(start, end):
new_list1.append(compare[i])

# 역방향인 경우
start = first_idx
end = first_idx - N

for i in range(start, end, -1):
new_list2.append(compare[i])

# 둘 중 하나 맞으면 good puzzle
if sequence == new_list1 or sequence == new_list2:
print("good puzzle")
else:
print("bad puzzle")

'''
5
1 2 3 4 5
3 4 5 1 2

6
1 2 3 4 5 6
3 2 1 6 5 4
4 5 6 1 2 3

11
11 10 9 8 7 6 5 4 3 2 1
1 2 3 4 5 6 7 8 9 10 11

'''

[프로그래머스] [2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임

[프로그래머스] [2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임

출처: [2019 카카오 개발자 겨울 인턴십] 크레인 인형뽑기 게임


문제

게임개발자인 “죠르디”는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.
“죠르디”는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.

crane_game_101.png

게임 화면은 “1 x 1” 크기의 칸들로 이루어진 “N x N” 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 “5 x 5” 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 “1 x 1” 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.

crane_game_102.png

만약 같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 되면 두 인형은 터뜨려지면서 바구니에서 사라지게 됩니다. 위 상태에서 이어서 [5번] 위치에서 인형을 집어 바구니에 쌓으면 같은 모양 인형 두 개가 없어집니다.

crane_game_103.gif

크레인 작동 시 인형이 집어지지 않는 경우는 없으나 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다. 또한 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다고 가정합니다. (그림에서는 화면표시 제약으로 5칸만으로 표현하였음)

게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.


제한

  • board 배열은 2차원 배열로 크기는 “5 x 5” 이상 “30 x 30” 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

입출력

board moves result
[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

입출력 예 1

인형의 처음 상태는 문제에 주어진 예시와 같습니다. 크레인이 [1, 5, 3, 5, 1, 2, 1, 4] 번 위치에서 차례대로 인형을 집어서 바구니에 옮겨 담은 후, 상태는 아래 그림과 같으며 바구니에 담는 과정에서 터트려져 사라진 인형은 4개 입니다.

crane_game_104.jpg


풀이

-


소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def solution(board, moves):
N = len(board) # 보드의 길이
answer = 0
basket = []
for move in moves:
for i in range(N):
if board[i][move - 1] > 0: # Move별로 맨 위에 있는 인형을 바구니에 넣고, 빈칸으로 전환
basket.append(board[i][move - 1])
board[i][move - 1] = 0
break

if len(basket) > 1: # 바구니가 2개이상일 때부터
if basket[-1] == basket[-2]: # 가장 최신에 들어온 것과 그 전에 들어온 것이 같으면 두개 삭제
basket.pop()
basket.pop()
answer += 2

return answer


print(solution([[0, 0, 0, 0, 0], [0, 0, 1, 0, 3], [0, 2, 5, 0, 1], [4, 2, 4, 4, 2], [3, 5, 1, 3, 1]],
[1, 5, 3, 5, 1, 2, 1, 4]))

2021년 07월 23일 금요일 IT뉴스

1. NHN페이코, 오프라인 결제 인프라 확대…’페이코 단말기’ 보급한다

NHN페이코, 오프라인 결제 인프라 확대…’페이코 단말기’ 보급한다

© 뉴스1

NHN페이코는 자체 개발한 ‘페이코(PAYCO) 결제 단말기’의 보급을 통해 오프라인 결제 인프라(기반시설) 확대에 나선다고 21일 밝혔다.

  • 페이코 결제 단말기(C2100)는 서명 패드와 각종 결제 리더기를 일체화한 올인원 단말로 IC, 마그네틱, NFC, QR·바코드, 비자(VISA) 콘택트리스(비접촉식) 결제를 모두 지원하고 전후면에 고해상도 LCD와 IC카드 슬롯을 각각 탑재해 가맹점주, 고객의 양방향 결제가 가능한 것이 특징이다.

신종 코로나바이러스 감염증(코로나19)로 수요가 확대된 QR·바코드 결제는 별도 리더기 없이 내장 카메라를 통해 지원하고 카드를 긁거나 삽입하지 않고 단말기에 대는 것만으로 결제가 이뤄지는 비자 콘택트리스 결제도 가능하다.

  • 비자 콘택트리스는 EMV 규격 기반의 IC칩 보안 기술 및 비자 토큰 서비스(VTS·Visa Token Service)를 적용해 편의성과 보안성을 높인 결제 기술이다.

NHN페이코는 동반성장위원회 지원사업을 시작으로 향후 주요 VAN사와 협력해 단말기 보급을 본격적으로 확대해 나갈 계획으로 다양한 업종에서 페이코 결제 인프라를 지속적으로 확대하기로 했으며, 기존 단말기가 QR·바코드 결제를 지원하지 않아 페이코 결제 도입이 어려웠던 매장이 가맹점으로 유입되는 효과가 있을 것으로 기대된다.


2. 네이버, 매출 절반이 ‘신사업’ e커머스·핀테크 성장 힘준다

네이버, 매출 절반이 ‘신사업’ e커머스·핀테크 성장 힘준다

올 2·4분기 매출 1조6635억원 중 절반 이상을 △e커머스(3653억원) △핀테크(2326억원) △콘텐츠(1448억원) △클라우드(949억원)에서 벌어들인 것으로 이는 검색·디스플레이 광고가 핵심인 서치플랫폼 매출(8260억원)을 넘어선 규모다.

스마트스토어 당일배송-신용대출

네이버 스마트스토어 46만 판매자들 대상으로 ‘네이버 풀필먼트 얼라이언스(NFA)’를 출시하고, CJ대한통운과 전국 당일배송 풀필먼트 체계를 구축하기로 했으며, 핀테크 부문 관련 네이버파이낸셜 신용평가모델을 더욱 정교화해 더 많은 네이버페이 이용자들이 다양한 혜택을 누릴 수 있도록 할 것이라고 했으며, 네이버는 사업자 전용 신용대출 등 기업간거래(B2B) 분야 핀테크 역량도 강화한다.

미래먹거리 ‘제페토’, 매출 70% 늘어

메타버스 플랫폼 ‘제페토’ 관련, “전 세계 이용자가 2억명에 달하는 제페토는 최근 삼성전자, 현대차, 구찌, 디올 등의 광고 확대로 매출이 전년 대비 70% 이상 성장했다”면서 “이용자가 직접 아바타 아이템을 만들 수 있는 ‘제페토 스튜디오’에서 게임까지 제작할 수 있는 기능을 연내 출시할 계획”이라고 밝혔다.


3. “야놀자가 우리몫 다 뺏는다” 모텔 사장님들 뿔났다

“야놀자가 우리몫 다 뺏는다” 모텔 사장님들 뿔났다

야놀자 사옥 전경 [야놀자 제공, 123RF, 망고보드]

여행 플랫폼 ‘야놀자’의 광고 수수료 체계가 ‘지역 톱’ ‘지역 인기’ ‘지역 리스트’ 등 성격이 겹치는 카테고리를 여러 개 만들어 각각 광고료를 책정하는 정책 때문에 숙박업주들에게 과도한 부담을 지우고 있다는 불만이 커지고 있다.

22일 헤럴드경제 취재를 종합하면, 숙박업소 단체 대한숙박업중앙회의 일부 지회는 야놀자의 광고 및 수수료 체계의 불공정함을 지적하기 위한 단체 행동을 준비하고 있고 일부 업주는 공정거래위원회 국민신문고에 민원을 접수하고 야놀자 측 소명을 기다리고 있는 상황이다.


4. “콘텐츠 대전 시작됐다”…네이버 vs 카카오, 주도권 싸움 치열

“콘텐츠 대전 시작됐다”…네이버 vs 카카오, 주도권 싸움 치열

네이버 제공

카카오웹툰 제공

네이버는 왓패드 웹툰 스튜디오를 앞세워 글로벌 창작자 약 570만명이 만든 10억개 이상의 원천 콘텐츠를 바탕으로 드라마·영화·애니메이션 등 다양한 영상화 프로젝트를 선보인다는 구상으로 특히 1000억원 규모의 펀드를 조성하고 남미·유럽·동남아시아 등 글로벌 영상화 사업에서 두각을 나타낼 방침이다.

다음웹툰컴퍼니도 8월부터 ‘카카오웹툰 스튜디오’로 거듭나며, 기존 다음웹툰은 물론 ‘이태원 클라쓰’ ‘나 혼자만 레벨업’ ‘사내맞선’ ‘나빌레라’ ‘승리호’ ‘경이로운 소문’ ‘취향저격 그녀’ 등 카카오페이지의 콘텐츠 IP도 통합해 제공한다.


5. 저커버그 “메타버스는 모바일 인터넷의 진정한 후계자”

저커버그 “메타버스는 모바일 인터넷의 진정한 후계자”

마크 저커버그는 22일(현지시각) 미 IT 전문매체인 더버지와 인터뷰를 갖고 “메타버스는 매우 거대한 주제”라며 “메타버스는 모바일 인터넷의 후계자”라고 했으며, “많은 사람들이 메타버스를 단순히 게임의 한 부분이 될 것이라고 생각하지만, 그것을 뛰어넘을 것”이라며 “나는 메타버스가 기술 산업의 다음 장을 여는 큰 부분이 될 것이라고 본다”고 했다.

저커버그가 생각하는 메타버스는 현재 테크 기업들이 내놓은 메타버스 플랫폼과는 다른 형태로 현재 게임 로블록스나 네이버의 제페토 등 메타버스를 기반으로 한 플랫폼이 존재하지만 그는 “메타버스는 공공장소 같은 온라인 공간이 돼야 한다”며 “사람들이 공동으로 상호작용하는 모든 것이 메타버스여야 한다. 각 회사마다의 자체 메타버스는 없어야 한다”고 주장했다.

[백준] 20301번 반전 요세푸스

[백준] 20301번 반전 요세푸스

출처: [백준] 20301번 반전 요세푸스


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 (추가 시간 없음) 1024 MB 467 248 201 54.918%

문제

요세푸스 문제는 다음과 같다.

1번 사람 오른쪽에는 2번 사람이 앉아 있고, 2번 사람 오른쪽에는 3번 사람이 앉아 있고, 계속하여 같은 방식으로 N명의 사람들이 원을 이루며 앉아 있다. N번 사람 오른쪽에는 1번 사람이 앉아 있다. 이제 K(≤N)번 사람을 우선 제거하고, 이후 직전 제거된 사람의 오른쪽의 K번째 사람을 계속 제거해 나간다. 모든 사람이 제거되었을 때, 제거된 사람의 순서는 어떻게 될까?

이 문제의 답을 (N, K)–요세푸스 순열이라고 하며, (7, 3)–요세푸스 순열은 ⟨3,6,2,7,5,1,4⟩가 된다.

하지만 한 방향으로만 계속 돌아가는 건 너무 지루하다. 따라서 요세푸스 문제에 재미를 더하기 위해 M명의 사람이 제거될 때마다 원을 돌리는 방향을 계속해서 바꾸려고 한다. 이렇게 정의된 새로운 문제의 답을 (N, K, M)–반전 요세푸스 순열이라고 하며, (7, 3, 4)–반전 요세푸스 순열은 ⟨3,6,2,7,1,5,4⟩가 된다.

N, K, M이 주어질 때, (N, K, M)–반전 요세푸스 순열을 계산해 보자.


입력

첫째 줄에 정수 N, K, M이 주어진다. (1≤N≤5 000, 1≤K,M≤N)


출력

(N, K, M)–반전 요세푸스 순열을 이루는 수들을 한 줄에 하나씩 순서대로 출력한다.


예제 입력 1

1
7 3 4

예제 출력 1

1
2
3
4
5
6
7
3
6
2
7
1
5
4

출처


알고리즘 분류


소스코드 (최초)

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
import sys
from collections import deque

input = sys.stdin.readline

N, K, M = map(int, input().split())

people = deque(x for x in range(1, N + 1))

count = 0
direction = 1
while people:
if direction: # 오른쪽
for _ in range(K - 1):
people.append(people[0])
people.popleft()
elif not direction: # 왼쪽
for _ in range(K):
people.appendleft(people.pop())

print(people.popleft())
count += 1
if count == M:
count = 0
direction = not direction

소스코드 (수정)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
from collections import deque

input = sys.stdin.readline

N, K, M = map(int, input().split())

people = deque(x for x in range(1, N + 1))

while people:
for _ in range(M):
people.rotate(-(K - 1)) # 오른쪽
if not people:
break
print(people.popleft())

for _ in range(M):
people.rotate(K) # 왼쪽
if not people:
break
print(people.popleft())