코문풀(bj-1748번,2484번)

💻코딩문제풀이

🔎백준문제

#1748. 수 이어쓰기 1 <난이도: 2> 링크

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
Input: 120
Output: 252

내가 푼 문제 풀이(python)

def solution(n):
    list = []
    for i in range(1,n+1):
        list.append(i)
    list = "".join(map(str,list))
    return len(list)

n = int(input())
print(solution(n))

코드해설:

리스트를 하나 생성하고, for문을 돌리며 1부터 1씩 증가시킨 값을 리스트에 추가하는 작업을 N번 반복한다.
그리고 리스트를 문자열로 변경해, 해당 문자열의 길이를 출력한다.

최적 문제 풀이(python)

def solution(n):
    return sum(map(lambda x: len(str(x)),range(1,n+1)))

n = int(input())
print(solution(n))

내가 했던 방식을 이용하면 리스트에서 문자열로 변경하는 작업이 필요하지만, 위와 같이 최저의 문제풀이를 적용하면 문자열을 계속해 증가시키는 형태이므로 번거로운 작업이 줄어든다.
또한 코드도 간결해진다.

#2484.주사위 네개 <난이도:3> 링크

-Input:
4
3 3 3 3
3 3 6 3
2 2 6 6
6 2 1 5
-Output:
65000

내가 푼 문제 풀이(python)

def money():
    lst = sorted(list(map(int,input().split())))
    if len(set(lst)) == 1:
        return lst[0]*5000+50000
    if len(set(lst)) == 2:
        if lst[1] == lst[2]: return 10000+lst[1]*1000
        return 2000 + (lst[1]+lst[2])*500
    for i in range(3):
        if lst[i] == lst[i+1]: return 1000+lst[i] *100
    return lst[-1]* 100
N = int(input())
print(max(money() for i in range(N)))

코드해설:

n번 입력 받은 n개의 경우의 조건을 판별해 n개의 경우 중 받는 금액이 가장 큰 값을 출력을 해준다.

money()라는 함수에 총 5개의 경우에 맞는 값을 return 하도록 조건문을 작성했다.
(같은 눈이 4개인 경우, 같은 눈이 3개인 경우, 같은 눈이 2개씩 2쌍인 경우, 같은 눈이 2개이고 나머지는 다른 경우, 모두 다른 눈인 경우)

초반에는 같은 눈이 2개일 경우가 (같은 눈이 1쌍이고 다른거 각각 1개씩)인 경우와 (같은 눈인게 2쌍)인 경우를 다르게 구분해서 조건을 구해 헤맸으나, 고민끝에 이 2개의 경우가 결국은 같은 것을 의미하는 것임을 알고 무사히(?) 문제를 해결할 수 있었다.

< ✅난이도 >
-난이도 1,2 : 구글링 안하고 직접 푼 문제
-난이도 3: 직접 풀었지만 메서드 구글링한 문제
-난이도 4,5: 직접 못 풀고 답을 참고하여 푼 문제 (꼭 다시 풀어봐야 할 문제)

다시 풀어볼 문제링크

앞으로 풀어볼 백준 문제 링크

좋은 웹페이지 즐겨찾기