넘치게 채우기

[LeetCode] 168. Excel Sheet Column Title 본문

PS/LeetCode

[LeetCode] 168. Excel Sheet Column Title

riveroverflow 2023. 8. 22. 19:02
728x90
반응형

https://leetcode.com/problems/excel-sheet-column-title/description/

 

Excel Sheet Column Title - LeetCode

Can you solve this real interview question? Excel Sheet Column Title - Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet. For example: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...   Example 1: I

leetcode.com

문제 유형 : 문자열 처리

문제 난이도 : Easy

 

문제

Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet.

For example:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...

정수 columnNumber가 주어집니다. 엑셀시트처럼 번호에 대응하는 알파벳 문자열를 반환하시오.

 

풀이

만약 N이 27 보다 작으면, 그냥 수를 char로 바꿔서 반환하면  된다.

 

그게 아니라면, 26으로 나눠본다. 나머지가 0이라면, Z라는 뜻이므로 Z를 문자열에 추가한다.

 

나머지가 0이 아닌경우, 나머지에 대응하는 문자를 문자열에 추가한다.

그리고 26으로 나눈다.

 

columnNumber가 0이하가 될때까지 반복하면 문자열이 거꾸로 채워져있다.

문자열을 뒤집어서 반환해주면 된다.

 

풀이

C++

class Solution {
public:
    string convertToTitle(int columnNumber) {
        int n = columnNumber;
        if (n < 27) {
            return string(1, 65 + (n - 1) % 26);
        }
        string c = "";
        while(n > 0) {
            if(n % 26 == 0) {
                c+= 90;
                n -= 1;
            } else {
                c += 65 + n%26 - 1;
            }
            n /= 26;
        }
        reverse(c.begin(), c.end());

        return c;
    }
};

 

Python3

class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        n = columnNumber
        c = ""

        if n < 27:
            return chr(n + 64)

        while n > 0:
            if n % 26 == 0:
                c += 'Z'
                n = n // 26
                n -= 1
            else:
                c += chr(n % 26 + 64)
                n = n // 26 

        return c[::-1]

 

Java

class Solution {
    public String convertToTitle(int columnNumber) {
        int n = columnNumber;
        StringBuilder c = new StringBuilder();

        if (n < 27) {
            return Character.toString((char) (n + 64));
        }

        while (n > 0) {
            if (n % 26 == 0) {
                c.append('Z');
                n = n / 26;
                n--;
            } else {
                c.append((char) (n % 26 + 64));
                n = n / 26;
            }
        }

        return c.reverse().toString();
    }
}
 
728x90
반응형