2021년 07월 28일 수요일 IT뉴스

1. 2분기 스팸건수, 1분기보다 9만건 ↑…대출·보험 유형

2분기 스팸건수, 1분기보다 9만건 ↑…대출·보험 유형

스팸 차단 애플리케이션 ‘후후’를 제공하는 후후앤컴퍼니는 2021년 2분기 후후 이용자들이 신고한 스팸 통계를 28일 발표했고, 전분기 대비 9만여건 증가한 692만건의 스팸 신고가 접수됐다. 주식·투자, 불법게임·도박 관련 스팸은 줄었지만, 대출·보험 가입 권유형 스팸이 급격히 늘었다.

개별 스팸 내용을 질적으로 분석해 본 결과 금융기관을 사칭해 대출·보험 등 금융 상품 상담을 명목으로 전화를 유도하는 수법이 증가했고금융과 전혀 관계 없는 보이스피싱 집단도 금융기관의 이름을 사칭할 수 있는 만큼 고객들의 세심한 주의가 필요하다.


2. 네이버 쇼핑에 AI ‘하이퍼클로바’ 적용…“상품명 자동 교정”

네이버 쇼핑에 AI ‘하이퍼클로바’ 적용…“상품명 자동 교정”

하이퍼클로바 [사진: 네이버]

네이버에 따르면 상품 코드나 상세 스펙, 이벤트 내용 등 많은 정보가 포함돼 복잡하고 긴 상품명이 쇼핑판에 노출되는 경우 이를 직관적이고 쉬운 상품명으로 하이퍼클로바가 자동 교정한다. 예를 들면 ‘0000(브랜드명) 남성 21SS 천연소가죽 멀티라인 슬림 댄디 스니커즈 FQKD1314GRT’와 같은 긴 상품명을 ‘0000(브랜드명) 천연소가죽 스니커즈’로 자동 변환해 사용자에게 노출하는 방식이다.

이밖에도 하이퍼클로바를 활용해 수천, 수만개의 쇼핑 리뷰를 한줄로 요약해주는 쇼핑 리뷰 요약 시스템도 서비스 적용을 앞두고 있다.

  • 네이버 관계자는 “하이퍼클로바는 방대한 한국어 학습량을 기반으로 스스로 핵심 내용을 요약하고 새로운 문장을 생성하는 데 뛰어난 능력을 보이고 있다”며 “이를 바탕으로 마치 사람이 큐레이션을 위해 문구를 작성한 것처럼 상품명을 교정할 수 있다”고 말했다.

3. 야놀자, 고속버스 예매 서비스 오픈…”여행 슈퍼앱 전략 가속”

야놀자, 고속버스 예매 서비스 오픈…”여행 슈퍼앱 전략 가속”

종합 여가 플랫폼 기업 야놀자가 고속버스 예매 서비스를 오픈했다. [사진: 야놀자]

야놀자는 국내외 숙박·레저·레스토랑·교통(항공·철도·렌터카) 등 여행을 위한 모든 서비스를 통합 제공하고 있다. 특히 숙박, 레저 등 기존 사업과의 시너지를 위해 2019년 글로벌 항공권 검색 서비스를 시작으로 철도, 렌터카 등 교통 카테고리를 확대해 왔으며, 새로 선보인 고속버스 예매 서비스 역시 여행 슈퍼앱 전략의 일환으로, 보다 고도화된 모빌리티 환경을 구축하기 위해 마련했단 설명이다.

야놀자 앱 내 교통·항공 카테고리에선 전국 프리미엄·우등·일반 등 모든 등급의 고속버스를 확인할 수 있으며, 노선 검색부터 예매, 발권 등 고속버스 이용을 위한 모든 과정을 지원한다.


4. 카뱅 ‘휴면예금·보험금 찾기’ 출시 이틀만에 11억원 지급

카뱅 ‘휴면예금·보험금 찾기’ 출시 이틀만에 11억원 지급

[사진: 카카오뱅크]

카카오뱅크가 ‘휴면예금·보험금 찾기’ 서비스 출시 이틀 만에 지급액이 11억원을 돌파했다고 23일 밝혔으며, 카카오뱅크에 따르면 이틀 간 서비스를 조회한 이용자 수는 17만명이다. 약 5만8000건의 휴면예금과 휴면보험금이 원권리자에게 지급됐다.

카카오뱅크 관계자는 “고객들의 보다 편리한 금융생활을 위해 유용한 서비스를 지속 출시할 계획”이라고 말했다.

[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

'''