제이쿼리 문법

$(선택자).동작함수();

자바스크립트에서는 Window 객체의 onload() 메소드를 이용해서 문서가 모두 로드 된 다음 코드가 실행되도록 한다.

window.onload = function(){
    ;
};

제이쿼리에서는 Document 객체의 ready() 메소드를 이용한다.더 짧은 문법을 구사하기도 한다.

$(document).ready.(function(){
    ; });

$(function(){
    ; });

 


WRITTEN BY
choco-songyi

,

오늘 한 일 


 

<서버 프로그램>

배치 프로그램

사용자와 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에서 일괄 처리하는 방법

  • 필수 요소 : 자동화, 안정성, 대용량 데이터, 견고성, 성능 
  • 종류 : 스프링 배치, 쿼츠 스케줄러 

 

<프로그래밍 언어의 활용>

포인터

#include <stdio.h>

int main(){
	int n=4;
	int* pt = null;
	pt = &n;

	printf("%d", &n+ *pt - *&pt + n);
	return 0;
}
  • 답 : 8 (= x+4-x+4)
  • &n =  n의 주소값 x
  • *pt = pt가 가리키는 값
  • *&pt = pt의 주소값이 가리키는 값 (=n의 주소값 x)

 

자바

자바의 경우, while에 결괏값이 불린 타입이 아닌 경우 오류 발생

ex)

int x=1, y=6; 

while(y--){} // y가 boolean 타입이 아니라 int타입이기 때문에 ! Unresolved compilation problem 오류 발생 

 

<언어특성활용>

  1. 절차적 프로그래밍언어
    • 프로시저 호출의 개념, 명령형 프로그래밍 
    • 순차적 진행, 모듈화 및 구조화 가능 
    • 예) 알골, C언어, 포트란 
  2. 객체지향 프로그래밍 언어 
    • 객체 중심 프로그래밍 
    • 자료 추상화, 상속, 다중상속, 다형성(오버로딩, 오버라이딩), 동적 바인딩, 접근제어자 
    • 예) C++, C#, JAVA, 델파이 
  3. 스크립트 언어
    • 소스코드를 컴파일하지 않고 실행, 응용프로그램과 독립되어 사용함.
    • 쉽고 빠르게 배울 수 있는 단순한 구문과 의미
    • 예) PHP, Perl, Python, Javascript, Bash, Basic 
  4. 선언형 언어 
    • 해법 보다는 문제를 설명, "무엇"을 할 것인지에 중점
    • 종류 : 함수형언어, 논리형 언어 
    • 예) 순수함수( defunc 함수명), 익명함수(lambda ((x)(*x x)) : 함수명X), 고계함수 ( 함수의 인자 혹은 반환값으로 사용 가능)  

 

자바스크립트

  • 객체 기반의 스크립트 프로그래밍 언어 
  • 타입을 명시할 필요가 없는 인터프리터 언어 
  • 웹 브라우저 내에서 주로 사용, 다른 응용 프로그램 내장 객체에도 접근 가능
  • 브라우저마다 지원되는 버전이 다름
  • 프로토타입(prototype) 개념이 있고, prototype link 와 prototype object 활용 가능 

 

참고

- 수제비 2022 정보처리기사 2권 

'CS > 컴퓨터개론' 카테고리의 다른 글

[IT] 객체지향 프로그래밍  (0) 2022.03.11

WRITTEN BY
choco-songyi

,

객체지향 프로그래밍 언어 

개요

현실 세계의 개체를 하나의 객체로 만들어 마치 기계의 부품처럼 조립해서 프로그램 작성하는 기법

 

장단점

상속 재사용과 시스템 확장에 용이, 코드의 재활용성 높음 

사용자와 개발자 사이의 이해 쉽게함, 대형 프로그램 작성에 용이 

실행속도 느림 (처리 시간) 

 

종류

C++ C# JAVA Delphi Smalltalk 

 

구성요소

  1. 객체(Object)
    • 독립적으로 식별 가능한 이름
    • 객체끼리 상호연관성에 의한 관계
    • 객체가 반응할 수 있는 메시지 집합 = 연산(메서드) 
  2. 클래스(Class)
    • 공통된 속성과 연산을 갖는 객체의 집합
    • 객체지향 프로그램에서 데이터를 추상화하는 단위 
    • 각각 객체들이 갖는 속성과 연산을 정의하는 틀 
    • Supper Class = 상위 클래스, Sub Class = 하위 클래스
  3. 인스턴스(Instance)
    • 클래스에 속한 각각의 객체 
    • 클래스로부터 새로운 객체를 생성하는 것! = 인스턴스화 
  4. 메서드(Method)
    • 클래스로부터 생성된 객체를 사용하는 방법 
    • 전통적 시스템의 함수 or 프로시저에 해당하는 연산 
  5. 메시지(Message) 
    • 객체에게 어떤 행위를 하도록 지시하기 위한 방법

언어의 특징

 

  1. 캡슐화
    • 데이터와 함수를 하나로 묶어 캡슐화된 객체가 외부에 정보 은닉(은폐)되어 변경 때 오류의 파급 효과가 적음. 
    • 캡슐화된 객체들은 재사용에 용이 
  2. 상속성
    • 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는것 
  3. 다형성
    • 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체가 가진 고유의 방법(특성)으로 응답할 수 있는 능력
  4. 추상화 
    • 불필요한 부분은 생략하고 객체의 속성 중 가장 중요한 것에 중점을 두어 모델화 하는 것. 
    • 데이터의 공통된 성질 추출하여 Super Class 선정
  5. 정보은닉 
    • 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통한 접근을 허용! 

'CS > 컴퓨터개론' 카테고리의 다른 글

[IT] 03.15. 오늘 공부한 것 정리 :)  (0) 2022.03.15

WRITTEN BY
choco-songyi

,

자바 환경설정 

1. 오라클 javaSE version 8 다운로드

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

- java download 를 위해선 oracle 아이디가 필요함! 

  - 기억이 안나는 경우엔 다시 설정필요. 

 

2. 환경설정

 bin 폴더 내에 존재하는 명령어를 실행하기 위해!

  • 제어판> 고급시스템설정> 시스템 속성> 고급> 환경변수
  • path 새로추가 -> 운영체제에 자바의 컴파일, 인터프리터를 등록하는 작업
  • 추가 경로 :  C:\Program Files\Java\jdk1.8.0_321\bin
  • 이후 확인 :  cmd 창에서 javac입력 시: 메뉴얼이 나오면 ok 

 

3. (웹서버) apache - tomcat 및 이클립스 설치 

1. WAS (Web Application Server) 설치 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

 

Apache Tomcat® - Apache Tomcat 9 Software Downloads

Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version

tomcat.apache.org

  1.  톰캣을 설치한 다운로드 폴더(경로명 : C:\Users\C22A-019\Downloads\apache-tomcat-9.0.59-windows-x64\apache-tomcat-9.0.59\conf) 에서 conf -> server.xml 파일을 열어 수정해준다. 
    • URIEncoding ="utf-8" 추가 
    • port="8080"으로 다시 변경해주어야 404 error가 안뜸!
  2.  context.xml 파일도 수정해준다.
    • <Context privilaged="true" reloadable="true" >

3. Preferences > General> Workspace > Textfile Encoding : UTF-8 로 변경 

  • Web> CSSfile 인코딩 변경 

  • HTMLfile 인코딩 변경 

  • JSPfile 인코딩 변경

2. 통합개발툴 Eclipse :  설치  

Eclipse Downloads | The Eclipse Foundation

 

Eclipse Downloads | The Eclipse Foundation

The Eclipse Foundation - home to a global community, the Eclipse IDE, Jakarta EE and over 415 open source projects, including runtimes, tools and frameworks.

www.eclipse.org


서버 연동해서 웹 프로젝트 만들기 

1. Dynamic Web Project 시작하기 

2. 웹서버 새로 구축 

 

 

실행결과

1. jsp 파일생성

2. 실행결과 확인 

 

3. 문제점 

WebApp 자체를 돌렸을 때는 404 error가 일어남. 

해결

  • how? server > Modules에서 path설정 변경! 
  • /WebApp 프로젝트에서는 /index 경로의 jsp 파일로 넘겨줄수 있게끔! 
    • index.jsp 파일을 만들어주어서 경로를 변경
    • WebApp.jsp 파일을 만들면 굳이 경로를 변경할 필요x

최종결과 ok !

  • 프로젝트에서 서버 실행했을 때 


참고

 

자바(Java) 설치 및 환경설정 & 이클립스(Eclipse) 설치 : 네이버 블로그 (naver.com) 

 

자바(Java) 설치 및 환경설정 & 이클립스(Eclipse) 설치

1. 자바 개발 환경(JDK) 설치 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa...

blog.naver.com

3. 웹개발의 시작 (tistory.com)

 

3. 웹개발의 시작

이제 본격적으로 웹 개발이 어떻게 이루어지는지 알아보고 실습해보도록 하겠습니다. 1. 이클립스를 실행을 시키고 왼쪽의 Project Explorer 에서 빈공간에 마우스 우클릭을 한 후 new > dynamic web projec

dzzienki.tistory.com

2. 이클립스에서 개발환경 설정하기 (tistory.com)

 

2. 이클립스에서 개발환경 설정하기

이제 본격적으로 웹 개발을 하기에 앞서, 톰캣과 이클립스에서 몇가지 추가적으로 설정을 해주어야 합니다. 아 참 그리고 오늘 안 사실인데 티스토리의 수익구조는 애드센스라는 위젯? 을 이용

dzzienki.tistory.com

[JSP] HTTP 상태 404 - 찾을 수 없음 (tistory.com)

 

[JSP] HTTP 상태 404 - 찾을 수 없음

HTTP 404 오류입니다. 1. Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다. (메시지가 없는 경우) - URL 경로는 제대로 되어있지만 페

clgnsdl94.tistory.com

 


WRITTEN BY
choco-songyi

,

programmers.co.kr/learn/courses/30/lessons/42626

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

 

[코테리뷰]

문제 접근

  • 가장 작은 두 개의 지수를 이용해서 새로운 지수로 바꿔주고, 모든 값이(스코피 지수가) K보다 커질 때까지 걸리는 횟수를 구해준다.

  • 효율성 문제 : heapq를 이용하여 최솟값을 보다 빨리 찾을 수 있다.

Heapq 이용 시 알아야 할 3가지

  1. heapq로 만들어주기 : heapq.heapify(리스트명)

    • 결과 : 해당 리스트가 heap으로 바뀐다.
  2.  heapq에 원소출력하기 : heapq.heappop(힙명)

    • 결과 : 해당 힙의 원소 중 최솟값이 pop된다.
  3.  heapq에 원소 입력하기 : heaq.heappush(힙명, 원소값)

    • 결과 : 해당 힙에 원소값이 추가된다.

내 코드

import heapq


def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)  # 리스트 -> 힙큐로 바꿔준다 :):)

    while scoville:
        answer += 1

        new = heapq.heappop(scoville)  # 가장 작은 값이 꺼내진다.(힙의 이름 명시하는 것 잊지 말기)
        if not scoville:
            return -1
        new += heapq.heappop(scoville) * 2
        heapq.heappush(scoville, new)
        smallest = heapq.heappop(scoville)
        if smallest >= K:
            break
        else:
            heapq.heappush(scoville, smallest)

    return answer

WRITTEN BY
choco-songyi

,

programmers.co.kr/learn/courses/30/lessons/42885

 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr

[코테리뷰]

접근 방식

  • 그리디 = > 구명보트에 2사람이 같이 탈 수 있는 조건 : 보다 무거운 사람은 보다 가벼운 사람과 탈 수 있다는 가정 성립

  • 그래서 인덱스를 앞뒤로 좁혀나가서 같이 탈 기준(limit보다 무게가 같거나 적은지)으로 비교해줌.

    • 비교 ok : 서로 인덱스 +1/-1

    • 비교 not ok : 끝의 인덱스 -1

내 코드

  • sort를 해주고, deque를 사용함
from collections import deque


def solution(people, limit):

    alone, together=0,0 # 따로, 둘이 같이 타는 경우의 수 변수
    queue = deque(sorted(people)) # 오름차순으로 정렬
    lightest = queue.popleft()  # 가벼운 사람

    while lightest:
        if not queue: # 큐가 (비교대상이) 더이상 존재하지 x
            alone+=1
            break
        heaviest = queue.pop()  # 무거운 사람
        sum = lightest+heaviest # 비교할 대상 : 두 사람의 무게 합
        if sum <= limit: # 같이 탈 조건 : limit보다 적을 때 같이 타기
            together+=1
            if not queue: # empty pop - 오류 방지
                break
            else:
                lightest = queue.popleft()
        else: # 무거운 사람 혼자 보트 타기
            alone+=1
    answer=alone+together
    return answer

내코드의 문제점 :

  • 큐를 이용하다보니 큐가 더이상 존재하지 않을 때 ( 비교대상이 없거나, 비교 자체가 끝났을 때의) 처리를 각각 해주어야지 제대로 된 답이 도출된다. (이 오류를 잡느라고 시간을 오래씀) & 직관적으로 코드를 볼 때 어려움! ㅜㅜ

다른 분 코드

  • 내 코드보다 직관적으로 이해가능!
def solution(people, limit):
    people.sort()
    count = 0

    first = 0
    last = len(people) - 1
    while first < last:
        if people[first] + people[last] <= limit:
            first += 1

        last -= 1

        count += 1

    if first == last:
        count += 1

    return count

WRITTEN BY
choco-songyi

,

 

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

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

문제 설명

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.

컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.

제한사항

  • 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.

  • 각 컴퓨터는 0부터 n-1인 정수로 표현합니다.

  • i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.

  • computer[i][i]는 항상 1입니다.

입출력 예

n computers return
3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2
3 [[1, 1, 0], [1, 1, 1], [0, 1, 1]] 1

예시

아래와 같이 2개의 네트워크가 있습니다.

접근방법(BFS)

- BFS 란? 

  - 너비 우선탐색 : 가까운 노드부터 탐색하는 알고리즘

  - 보통, 선입선출인 큐 자료구조를 이용

 

- 동작방식?

  1) 탐색 시작 노드큐에 삽입하고, 방문처리를 한다.

  	bfs.append(visited.index(0)) # 시작노드 (방문하지 않은 노드를 찾아서) 큐 삽입
        while bfs: 
            node=bfs.pop(0) # 시작노드 꺼내기
            visited[node]=1 # 방문처리  
       

  2) 큐에서 노드를 꺼내, (1)인접 노드 중에서 (2)방문하지 않은 노드를 모두 큐에 삽입하고, 방문처리를 한다. 

          for i in range(n): # 자료 탐색
                if visited[i]==0 and computers[node][i]==1: # 큐 삽입 조건 : (1),(2)
                    bfs.append(i) # 큐 삽입

 

  3) 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. 

 

- 필요한 자료구조?

  - 큐 (본 문제에서는 리스트를 사용)

  - 방문여부 리스트

def solution(n, computers):

    answer=0 # 정답 변수
    bfs=[] # 스택 준비
    visited=[0]*n # 방문여부 리스트

    while 0 in visited: # 방문이 다 되어질 때까지!(visited에 0 이 없을 때까지)
        bfs.append(visited.index(0)) # 방문하지 않은 노드 인덱스를 찾아서 추가
        
        while bfs: # bfs 리스트에 노드가 있을 때
            node=bfs.pop(0) # 앞에서부터 node pop!
            visited[node]=1 # 방문처리해주기

            for i in range(n): # 인접 노드를 방문하기
                if visited[i]==0 and computers[node][i]==1: # 아직 방문하지 않았고, 서로 연결되어 있을 때
                    bfs.append(i) # 연결된 i를 추가해주기

        # 연결되어 있는 노드의 방문이 끝났다면,
        answer+=1 # 카운트해주기
    return answer

# 정답 확인
print(solution(n=3,computers=[[1, 1, 0], [1, 1, 0], [0, 0, 1]]))

참고: list 자료형으로도 append와 pop을 통해 queue를 이용할 수 있지만, deque를 쓰면 더 빠르게 이용가능합니다. 

- from collections import deque

- bfs=deque()

- deque.popleft()


WRITTEN BY
choco-songyi

,

programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

문제 설명

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.

더보기

1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.

2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.

3. 그렇지 않으면 J를 인쇄합니다.

예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다.

내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 싶습니다. 위의 예에서 C는 1번째로, A는 3번째로 인쇄됩니다.

 

현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려

주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.

  • 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.

  • location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.

입출력 예

priorities location return
[2, 1, 3, 2] 2 1
[1, 1, 9, 1, 1, 1] 0 5

입출력 예 설명

예제 #1

- 문제에 나온 예와 같습니다.

예제 #2

- 6개의 문서(A, B, C, D, E, F)가 인쇄 대기목록에 있고 중요도가 1 1 9 1 1 1 이므로 C D E F A B 순으로 인쇄합니다.

문제 풀이

접근방식

  • 방법 : 우선순위가 높은 것부터 인쇄하되, 적은 것은 뒤로 append해서 나중에 pop!

  • 자료구조 이용 : collection의 deque와 stack기능을 하는 list

  • 오류 나는 것들 하나씩 실행해보면서 찾아서 수정하기

  • 런타임 에러

    • ValueError : max() arg is an empty sequence : 큐가 empty해서 나는 오류

    • TypeError: 'int' object is not subscriptable : 타입 비교가 잘못 되어서 나는 오류 (현재 코드에서는 필요 없어서 제거) 

# location에 있는 문서가 몇번째로 인쇄되는지 리턴
# priorities가 높은 문서부터 인쇄한다.
from collections import deque


def solution(priorities, location):

    queue=deque() # 큐 구현을 위해 deque 라이브러리 사용

    for i in range(len(priorities)):
        queue.append([i, priorities[i]]) # 인덱스와 함께 큐에 넣어준다. 

    stack=[] # 최종 인쇄된 순서를 기록하기 위한 리스트
    while queue: # 큐가 있을 때
        first=queue.popleft() # 왼쪽에서부터 pop 해준다. 
        if queue: # 뒤에 더 있을 때
            best=max(list(queue),key=lambda x:x[1]) # ValueError: max() arg is an empty sequence -> queue가 empty일 때 포착 필요
            if first[1]>=best[1]: # pop 한게 우선순위가 더 높으면
                if stack.count(first)==0: # 아직 first 원소가 안들어갔다면 (여기도 중복 방지)
                    stack.append(first)
            else: # 우선 순위 높은게 뒤에 있으면
                queue.append(first)
                if stack.count(best)==0: # 아직 best 원소가 안들어갔다면 (중복 방지)
                    stack.append(best)
        else: # 마지막 요소일 때
            stack.append(first)
    print(stack)

    # 주어진 loaction 인덱스에 해당하는 원소가 몇 번째로 출력되는지 확인하는 작업!
    for i in range(len(stack)):
        if location == stack[i][0]:
            return (i+1) # 0번째 인덱스부터 있으므로 +1을 해준다. 


print(solution(priorities=[1, 1, 9, 1, 1, 1],location=0))

실행 결과


WRITTEN BY
choco-songyi

,

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항

  • str은 길이 1 이상인 문자열입니다.

입출력 예

s return
Zbcdefg gfedcbZ

코드 풀이

접근방식

  • 큰것부터 정렬하기 때문에 reverse=True인 sorted를 사용하자.

기본개념

  • 문자열 -> 리스트로 : list({문자열}
  • 리스트 -> 문자열로 : "".join({리스트})
def solution(s):
    return "".join(sorted(list(s),reverse=True))

- 참고 : list1.sort() 적용 x, sorted(list1) ok


WRITTEN BY
choco-songyi

,

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.

  • numbers의 원소는 0 이상 1,000 이하입니다.

  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예

numbers  return
[6, 10, 2] 6210
[3, 30, 34, 5, 9] 9534330

코드 분석

처음 시도

  • permutation을 사용해서 모든 경우의 수를 구했다.
  • 결과: sample은 ok, test case는 전부 시간 초과가 나왔다..!
# 주어진 numbers에서 정수를 이어붙여서 만들 수 있는 가장 큰 수를 찾는다.
# 정수를 붙이는 순열 이용 => 그 중 가장 큰 수 찾기
from itertools import permutations


def solution(numbers):
    answer_list = []
    all_list=list(permutations(numbers,len(numbers)))
    for i in range(len(all_list)):
        temp=""
        for j in range(len(all_list[i])):
            temp = temp +str(all_list[i][j])
        answer_list.append(temp)
    print(answer_list)
    answer=max(answer_list)
    return answer

수정한 코드

point

  • 문자열끼리 비교했다.
    • ASCII문자열로 비교가 되어서 앞에서부터 큰 수로 정렬이 가능하다.
    • map(str, {리스트})를 통해 형변환
  • sorted로 정렬해줄 때, key값에 lambda 함수를 이용해서 세 자리의 값을 모두 비교해주어서 정렬했다.
    • 내림차순으로 정렬하기 때문에 reverse=True를 해준다.
  • "".join(array)를 이용해서 문자열을 합쳐주었다.
# permutation 모든 경우의 수를 구하려고 하니 시간 초과 오류가 났다.
# 다른 방식으로 접근하는 것이 필요하다.

# 문자열을 내림차순으로 정렬한 다음, join 해주는 방식이다!
# 주의 : 처음에는 문자열로 비교할 것 !!(가장 큰 자릿수부터 비교 가능)


def solution(numbers):
    # 정수 type을 문자열 type으로 변경해주기 (map을 통한 형변환!)
    arr = list(map(str, numbers))

    # 문자열 크기대로 sorting하기
    # lambda : 1000이하의 정수이므로, x를 세 번 곱해주어 비교한다.
    array=sorted(arr, key=lambda x:x*3, reverse=True)

    # join으로 각각의 문자열들을 빈틈없이 붙여주기
    # int로 바꾸어주고, 다시 str으로 바꿔주기
    return str(int("".join(array)))

결과


WRITTEN BY
choco-songyi

,